软件工程-设计模式
更多请参考http://www.javashuo.com/article/p-sxmittye-ga.html算法
策略模式
定义一系列算法,将之封装起来,而且使它们能够互相替换。该模式使得算法可独立与客户而变化。
- 策略是一个接口,该接口定义了若干个抽象方法
- 具体策略:是实现策略接口的类,实现了策略接口所定义的抽象方法,即具体算法
- 适用情景:
- 一个类定义了多种行为,而且这些行为在这个类的方法中以多个条件语句的形式出现,使用策略模式能够避免在类中使用大量的条件语句。
- 程序的主要类不但愿暴露复杂的、与算法相关的数据结构。
- 须要使用一个算法的不一样变体。
访问者模式
做用于某对象结构中的各个元素的操做,它使得用户能够在不改变各个元素的类的前提下定义做用于这些元素的新操做。
- 抽象元素:一个抽象类,该类定义了接收访问者的操做
- 具体元素:element的子类
- 抽象访问者:一个接口,该接口定义操做具体元素的方法
- 具体访问者:实现抽象访问者接口的类
- 适用情景:
- 在一个多对象的集合结构中,相对集合中的对象增长一些新操做。
- 须要对集合中的对象进行不少不一样的而且不相关的操做,而咱们又不想修改对象的类,此时使用访问者模式,在抽象访问者接口类中定义一些不一样的对象操做。
装饰模式
动态地给对象增长一些额外的职责。功能上装饰模式比生成子类更灵活。
- 抽象组件:至关于抽象类,定义了须要进行装饰的方法。
- 具体组件:抽象组件的一个子类。
- 装饰:抽象组件的一个子类,做为“装饰者”的角色,去装饰具体组件(做为“被装饰者”),因此装饰者须要包含被装饰者的引用,装饰者能够是抽象类也能够是非抽象类。
- 具体装饰:装饰角色的一个非抽象子类。
- 适用情景:
- 程序但愿动态地加强类的某个对象的功能,而又不影响该类的其余对象。
- 采用继承来加强对象功能不利于系统的扩展和维护。
适配器模式
将一个类的接口转化为客户但愿的另一个接口,它使得本来因为接口不兼容而不能一块儿工做的那些类可以一块儿工做。
- 目标:目标是一个客户想使用的接口。
- 被适配者:本来已经存在的接口或抽象类,被适配者须要适配。
- 适配器:该类实现了目标接口,并包含有被适配者的引用,对被适配者与目标接口进行适配。
- 适用情景:如描述
工厂化模式
定义一个用于建立对象的接口,让子类决定实例化那一个类,即它使一个类的实例化延迟到其子类。
- 抽象产品:抽象类或接口,定义产品实现的方法。
- 具体产品:若是抽象产品是抽象类,则具体产品是它的子类;若是抽象产品是接口,则具体产品是实现该接口的类。
- 构造者:一个接口或抽象类,构造者负责定义一个被称为工厂方法的抽象方法,该方法返回具体产品类的实例。
- 具体构造者:若是构造者是抽象类,则具体构造者是子类;若是构造者是接口,则具体构造者是实现该接口的类。具体构造者重写工厂方法,使该方法返回具体产品的实例。
- 适用情景:
- 用户须要一个类的子类的实例,但不但愿该类的子类造成耦合
- 用户须要一个类的子类的实例,但用户不知道该类有哪些子类可用。
- 工厂方法使用户没必要知道它所使用的对象是如何被建立的,只需知道该对象有哪些方法便可。