设计模式分类
前言
如果你用的语言能把类型像变量一样赋值并传来传去,很多创建型模式就没用了。
如果你用的语言能把函数像变量一样赋值并传来传去,很多行为模式就没用了。
如果你用的语言 style 反对 class hierarchy,很多结构模式就没用了。
The Lack of Design Patterns in Python Presentation.pdf
模式可以分为类模式和对象模式,类模式是用继承,对象模式是用委托
1.创建型模式
社会化的分工越来越细,自然在软件设计方面也是如此,因此对象的创建和对象的使用分开也就成为了必然趋势。因为对象的创建会消耗掉系统的很多资源,
所以单独对对象的创建进行研究,从而能够高效地创建对象就是创建型模式要探讨的问题。这里有6个具体的创建型模式可供研究,它们分别是:
简单工厂模式(Simple Factory) 、 工厂方法模式(Factory Method) 、 抽象工厂模式(Abstract Factory)、创建者模式(Builder)、
原型模式(Prototype) 、单例模式(Singleton)
2.结构型模式
在解决了对象的创建问题之后,对象的组成以及对象之间的依赖关系就成了开发人员关注的焦点,因为如何设计对象的结构、继承和依赖关系会影响到后续
程序的维护性、代码的健壮性、耦合性等。对象结构的设计很容易体现出设计人员水平的高低,这里有7个具体的结构型模式可供研究,它们分别是:
外观模式(Facade)、适配器模式(Adapter)、代理模式(Proxy)、装饰模式(Decorator)、桥模式(Bridge)、组合模式(Composite)、
享元模式(Flyweight)
3.行为型模式
在对象的结构和对象的创建问题都解决了之后,就剩下对象的行为问题了,如果对象的行为设计的好,那么对象的行为就会更清晰,它们之间的协作效率就
会提高,这里有11个具体的行为型模式可供研究,它们分别是:
模板方法模式(Template Method)、观察者模式(Observer)、状态模式(State)、策略模式(Strategy)、职责链模式(Chain of Responsibility)、
命令模式(Command)、访问者模式(Visitor)、调停者模式(Mediator)、备忘录模式(Memento)、迭代器模式(Iterator)、
解释器模式(Interpreter)
4. 区别
(1)而策略模式则属于行为型模式,桥接模式是结构型模式的一种
(2)桥接模式表达的主要意义是接口隔离的原则,即把本质上并不内聚的两种体系区别开来,使得它们可以松散的组合,而策略在解耦上还仅仅是某一个算法
的层次,没有到体系这一层次。
(3)外观与适配器都是对现存系统的封装。
外观会定义新的接口,为现存系统提供一个更为方便的访问接口
适配器则是复用一个原有的接口,适配器是使两个已有的接口协同工作
(4)代理与外观的主要区别在于,代理对象代表一个单一对象,外观对象代表一个子系统,代理的客户对象无法直接访问对象,由代理提供单独的目标对象的访问,
而外观对象提供对子系统各元件功能的简化的调用接口。
(5)单例是创建型模式,享元是结构型模式。单例模式和享元模式都是数据共用的意思,只是单例是大家共用一个东西,而享元是共用多个东西
(6)模板方法模式与策略模式的都是行为模式,但分别使用继承和委派提供不同的算法行为
(7)装饰器模式与代理模式区别:装饰器关注于在一个对象上动态的添加方法,而代理关注于控制对对象的访问。换句话说,用代理模式,代理
类(proxy class)可以对它的客户隐藏一个对象的具体信息。因此,当使用代理的时候,我们常常在一个代理类中创建一个对象的实例。而使用
装饰器的时候,是将原始对象作为一个参数传给装饰者的构造器。