共性和可变性分析:
1.先寻找共性
2.从这些共性中创建抽象
3.从共性的变化寻找派生
4.看共性之间的关系如何
Facade(外观)模式:是一种通过为多个复杂的子系统提供一个一致的接口,而使这些子系统更加容易被访问的模式。该模式对外有一个统一接口,外部应用程序不用关心内部子系统的具体细节,这样会大大降低应用程序的复杂度,提高了程序的可维护性
Adapter(适配者)模式:使控制范围之外的一个原有对象与某个接口匹配。将原有类包含在另一个类中。让包含类与需要的接口匹配,调用被包含类的方法。
Strategy(策略)模式:可以根据所处的上下文,使用不同的业务规则或算法。对于所需算法的选择取决于发出请求的客户或者要处理的数据,将对算法的选择和算法的实现相分离,允许根据上下文进行选择。
Bridge(桥接)模式:将一组实现与另一组使用他们的对象分离开来。当存在一个抽象有不同实现时,Bridge模式最有用,他可以使抽象和实现相互独立的进行变化。
Decorator(装饰者)模式:动态的给一个对象添加功能,要使用的对象将执行所需的基本功能,但是,可能需要为这个对象添加某些功能,这些附加功能可能发生在对象的基本功能之前或者之后。可以通过创建对象链提供所需的行为。
Observer(观察者,又称发布-订阅)模式:定义对象间的一种一对多的依赖关系,当一个对象的状态发生变化的时候,所有依赖他的对象都将得到通知并自动更新。如果需要得到某件事通知的对象列表是变化的,或者是有条件的,那么Observe模式更具价值。这些变化可能是由于需求的变化,或者是由于需要通知的对象列表的变化而引起的。如果系统在不同的情况下运行,或由不同的用户运行,需要观察这列表都会不同,这时候observer模式也很有用。有的观察者只需要处理某些情况,有些并不需要处理,可以将筛选通知的责任转给subject对象,最好的实现是subject使用一个strategy模式测试通知是否需要被发出,每个观察者在注册的时候都将正确的strategy对象提供给subject对象。有时候,subject会调用观察者的update方法,传递信息,这可以避免观察者回调subject,但是经常是不同的观察者有不同的信息需求,这种情况可以再次使用strategy模式,用strategy调用观察者的update方法,同样的,观察者也需要将strategy对象提供给subject对象使用。
Template Method(模板)模式:定义一个操作中算法的骨架,而将一些步骤延迟到子类中。不改变算法的结构而重定义他的步骤。模板模式适用于存在几个互不相同但概念上相似的过程,每个过程的变化都是互相耦合的,因为他们都与某个过程相关。适用于要完成在某个细节层次一致的一个过程或者一系列步骤,但个别步骤在更详细的的层次上的实现可能不同。
工厂模式
工厂是用来实例化其他对象的方法、对象或者其他任何实体。对于对象的创建和管理,有一条很好的通用规则可以遵循:对象要么构造或者管理其他对象,要么使用对象,而不应该兼而有之。如果遵守这一约束,最终将降低耦合度,因为分工非常明确。“使用对象”与它们使用的对象是解耦的。它们无需知道有什么协作对象,甚至不需要知道可能会有什么对象,这些工作是工厂负责的。同时,工厂只知道它们在创建或者管理哪些对象,而无需知道这些对象如何使用。
Abstract Factory(抽象工厂)模式:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。将选择放在一个对象中,让这个对象负责创建要使用的对象,并使他与使用这些对象的对象分离开来。将对象的使用与对象的构造和管理分离开来。
Singleton(单例)模式:保证一个类仅有一个实例,并提供一个访问他的全局访问点。Singleton模式的工作原理是:用一个特殊的方法来实例化所需的对象。其中最关键的就是这个特殊的方法,调用这个方法的时候,检查对象是否已经被实例化,如果已经被实例化,该方法仅返回对该对象的一个引用。如果尚未被实例化,该方法实例化该对象并返回对此新实例的一个引用。singleton模式的本质在于每个对象都使用Singleton类的同一个实例,而不用必须负责将该实例四处传递给所有要使用他的对象。在一个协作对象对此实例所做的修改需要为另一个协助对象所见时,这点尤其重要。
Double-checkedLocking模式:仅适用于多线程应用程序,是Singleton的一种变化延展。
Object Pool(对象池)模式:在创建对象比较昂贵,或者对于特定类型能够创建的对象数目有限制时,管理对象的重用。在需要一个Reusable对象的时候,Client调用ReusablePool的acquireReusable方法,如果池为空,那么acquireReusable方法创建一个Reusable(如果能够),否则就等待直到有Reusable对象返回集合。
Factory Method(工厂方法)模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method模式使一个类的实例化延迟至其子类。一个类需要实例化另一个类的派生类,但不知道是哪一个。Factory Method允许派生类进行决策。经典实现:有一个抽象类来定义创建一系列对象的方法。为每一个可能存在的对象系列都派生一个类。