图解设计模式:23设计模式类图整理
最近把《图解设计模式》又翻了一遍,为了方便记忆,将里面的类图和一些要点整理了一下。
设计模式在Gof中的分类:
类型 | 模式 |
---|---|
创建型 | Abstract Factory(抽象工厂) Builder (建造者) Factory Factory(工厂模式) Singleton(单例) Prototype(原型模式) |
结构性 | Adapter (适配器) Bridge(桥接)Composite(组合) Decorator(装饰)Facade (门面) Flyweight(享元)Proxy(代理) |
行为型 | Chain of Responsibility(责任链) Command (命令)Interpreter(解释器) Iterator(迭代器)Mediator(调停者) Memento(记忆)Observer(观察者) State(状态)Strategy(策略) Template Method(模板)Visitor(访问者) |
创建型设计模式关心的是类的实例是怎么创建出来的。
结构型设计模式关心的是几个类的实例之间的组织关系。
行为型关心的是实例间如何互动的。
在《图解设计模式》中二十三种设计模式根据功能和结构进行了进一步的细分。下面设计模式的类图也将按照书中的分组出现。
第0组简单组:Adapter,Iterator
Adapter (适配器模式)
适配器用于填补需求和实际情况的空白,当我们不是从空白开始编程,需要对原有接口重复利用时,可以利用适配器模式,它可以很方便地利用原有接口创建新的接口。适配器有两种方式,继承和持有引用。
继承:
持有引用:
Iterator (迭代器模式)
iterator模式统一接口实现类的遍历,当你的接口有多个实现类,但他们的遍历方式各不相同,为了统一遍历而独立出遍历的接口。
第1组“交给子类”:Factory Method ,Template Method
Factory Method(工厂模式)
将对象的生成交给子类,不用new 关键字来生成实例,而是调用生成实例的专用方法来生成实例。这样就可以防止父类与其他具体类耦合。
Template Method (模板模式)
模板模式就是父类里声明了方法,和调用方法的业务逻辑,子类来实现这些方法,不同的子类有不同的方法实现,做到业务逻辑和实现方法分离。之所以叫模板模式,就好像一个镂空的模板,你可以用不同颜色的笔来描这个模板,模板,模板,模板……
“模板”这个词就是父类的业务逻辑,子类就是不同颜色的笔。
第二组:“简单化”:facade,Mediator
facade (门面模式)
Mediator (调停者模式)
如同一个公司里,组员们统一向调停者报告,调停者下达指示和命令,组员之间不再相互询问和互相指示。
第三组“分开考虑” :Bridge,Strategy
Bridge(桥接模式)
将类的功能层次结构和实现层次结构分开考虑,在两个维度上对类进行扩展。
Strategy(策略模式)
策略模式能够整体地替换算法,能让我们以不同的算法来解决同一个问题。
第四组“一致性”:Composite,Decorator
Composite(组合模式)
能够使容器与内容具有一致性,创造出递归结构的模式就是Composite,简单来说组合模式就是如何使用递归结构。
Decorator(装饰模式)
装饰边框与被装饰物的一致性,只需要一些装饰物就可以添加功能
第五组“访问数据结构”:Visitor,Chain of Responsibility
Visitor(访问者模式)
将处理从数据结构中分离出来。易于增加ConcreteVisitor,难于增加ConcreteElement。里面有多态存在。
Chain of Responsibility(责任链模式)
将多个对象组成一个责任链,然后按照它们在责任链上的顺序一个一个地找出到底应该谁来负责处理。
第六组“避免浪费”:Flyweight,Proxy
Flyweight(享元模式)
通过共享实例来避免new出实例。
Proxy(代理模式)
通过添加代理来增加功能。
第七组“管理状态”:Observer,Memento,State
Observer(观察者模式)
将观察者和被观察者分离增加可替换性。
Memento(备忘录模式)
在使用撤销功能时,需要先保存实例的相关信息。在撤销时,根据所保存的信息将实例恢复至原来的状态。
要想恢复实例,需要一个可以*访问实例内部结构的权限,但是如果稍不注意,又可能会将依赖于实例内部介个的代码分散地编写在程序中的各个地方,导致难以维护,并且破坏了封装。而Memento模式,可以保存实例的状态,防止对象封装的破坏
State(状态模式)
用类来表示状态,减少if else语句,易于添加新的状态,减少自相矛盾的现象发生。
第八组“生成实例”:Singleton,Prototype,Builder,Abstract Factory
Singleton(单例模式)
确保任何情况下只有一个实例
Prototype(原型模式)
对象种类繁多,无法将它们整合到一个类中,难以根据类生成实例,想解耦框架与生成的实例时都可以使用原型模式对类进行复制。在java中如果想要调用clone方法,被复制的类必须实现java.lang.Clonable这个标记接口。clone是浅复制,只复制引用。
Builder(建造者模式)
用于组装复杂结构类的实例。
Abstract Factory(抽象工厂模式)
抽象工厂的工作是将抽象零件转化为抽象产品。
第九组“用类来表现”:Command,Interpreter
Command(命令模式)
将命令实例化,可以实现在集合中管理命令以及用各种管理类的方法管理“命令”。
Interpreter(翻译模式)
使用自定义的语言编写程序,用java的语言解释运行。