摘要:适配器模式 Adapter(别名Wrapper)模式:将一个类的接口,转换成客户期望的另一个类的接口。适配器让原本接口不兼容的类可以合作无间。 要点: 1. 适配器模式主要应用于“希望复用一些现存的类,但是接口又与复用环境要求不一致的情况”,在遗留代码复用、类库迁移等方面非常有用。 2. 适配器模式有对象适配器和类适配器两种形式的实现结构,但是类适配器采用“多...
阅读全文
摘要:组合模式 组合模式:允许你将对象组合成树型结构来表现“整体/部分”层次结构。组合能让客户以一致的方式处理个别对象以及对象组合。 要点: 1. 组合模式以不遵守单一责任原则换取透明性,让Client将组合和叶节点一视同仁。 2. 在实现组合模式时,有很多设计上的折衷。要根据需求平衡透明性和安全性。 3. 有时候系统需要遍历一个树枝构件的子构件很多次,这时候可以把遍历结果缓存...
阅读全文
摘要:装饰者模式 Decorator模式(别名Wrapper):动态将职责附加到对象上,若要扩展功能,装饰者提供了比继承更具弹性的代替方案。 意图: 动态地给一个对象添加一些额外的职责。就增加功能来说,Decorator模式相比生成子类更为灵活。 设计原则: 1. 多用组合,少用继承。 利用继承设计子类的行为,是在编译时静态决定的,而且所有的子类都会继承到相同的行为。然而,如果能够利用组合的做法扩展...
阅读全文
摘要:外观模式 外观模式:提供了一个统一的接口,用来访问子系统中的一群接口。外观定义了一个高层接口,让子系统更容易使用。 要点: 1. 外观模式为复杂子系统提供了一个简单接口,并不为子系统添加新的功能和行为。 2. 外观模式实现了子系统与客户之间的松耦合关系。 3. 外观模式没有封装子系统的类,只是提供了简单的接口。如果应用需要,它并不限制客户使用子系统类。因此可以在系统易用性与通用性之间选择。 4....
阅读全文
摘要:Mediator 中介者模式:中介模式封装一系列的对象交互,集中管理相关对象之间复杂的沟通和交互。中介者使各对象不需要明显的相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。简单点来说,将原来两个直接引用或者依赖的对象拆开,在中间加入一个“中介”对象,使得两头的对象分别和“中介”对象引用或者依赖。 实现: Mediator:定义一个接口...
阅读全文
摘要:状态模式 状态模式:允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类。 要点: 1. 策略模式和状态模式是双胞胎,它们有相同的类图,但是它们的意图不同。策略模式是围绕可以互换的算法来成功创建业务的,然而状态模式是通过改变对象内部的状态来帮助对象控制自己的行为. 2. Context将与状态相关的操作委托给当前的Concrete State对象处理。 3. Context可将自身作为...
阅读全文
摘要:模板方法模式 模板方法模式:在一个方法中定义一个算法的骨架,而将一些实现步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。 要点: 1. 模板方法中的非final方法(默认实现或不做事的方法)称为“钩子”。 2. 钩子可以简化子类的实现。 3. 钩子可以让子类能够有机会对模板方法中某些即将发生的(或刚刚发生的)步骤做出反应。 4. ...
阅读全文
摘要:观察者模式(别名Publish-Subscribe):定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。 生活中的实例: 订阅报纸杂志 1. 报社的业务就是出版报纸。 2. 向某家报社订阅报纸,只要他们有新报纸出版,就会给你送来。只要你是他们的订户,你就会一直收到新报纸。 3. 当你不想再看报纸的时候,取消订阅,他们就不会再送新报纸来。 4. 只要...
阅读全文
摘要:策略模式(别名Policy): 定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。 使用继承的缺点: 1. 代码在多个子类中重复 2. 运行时的行为不容易改变 3. 很难抽象出子类的全部行为 4. 改一发而动全身 设计原则: 1. 把会变化的部分取出来封装起来,以便以后可以轻易的改动或扩充该部分,而不影响不需要变化的其他部分 2. 针对接口编程,而不是...
阅读全文
摘要:抽象工厂(Kit)模式提供一个接口,用来创建相关或依赖对象的家族,而不需要明确指定具体类。 特点: 1. 抽象工厂模式面对的问题是多个产品等级结构的系统设计 2. 抽象工厂模式是工厂方法的进一步推广 3. 抽象工厂将产品对象的创建延迟到它的具体工厂的子类。 4. 通常在运行时刻创建一个具体工厂类的实例,这一具体工厂的创建具有特定实现的产品对象,为创建不同的产品对象,客户应使用不同的具体工厂。 ...
阅读全文
摘要:工厂方法模式(别名Virtual Constructor)定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类。 特点: 1. 工厂方法让子类决定要实例化的类是哪一个。所谓的“决定”并不是指模式允许子类本身在运行时做决定,而是指编写抽象工厂类时,不需要知道实际创建的产品是哪一个。选择使用了那个子类,自然就决定了实际使用的产品是什么。 ...
阅读全文
摘要:简单工厂模式是由一个工厂对象决定创建出那一种产品类的实例。 实现: 工厂类: 抽象产品: 具体产品: 实现要点: 1. 工厂类可以根据传入的参数决定创建出哪一种产品类的实例。 2. 具体产品有共同的商业逻辑,那么这些公有的逻辑就应当移到抽象角色里面,这就意味着抽象角色应当由一个抽象类扮演。 3. 每个工厂类可以有多于一个的工厂方法,分别负责创建不同的产品对象。如java.text.DateFo...
阅读全文