写程序久了,单个项目代码量大了,就会思考如何用好的方式来组织自己的代码,使代码有更好的结构性。最近读了一本刘伟老师编写的《设计模式的艺术,软件开发人员内功修炼之道》,此书结合实例进行讲解,易于理解,受益匪浅。现将书中所列24种设计模式归纳如下:
1.单例模式(Singleton Pattern)
一个类只有一个实例,该类自行实例化,并向整个系统提供这个实例的可全局访问的方法
2.简单工厂模式(Simple Factory Pattern)
工厂类根据不同参数返回不同类的实例(被创建的实例通常有共同父类,因简单工厂模式中创建实例的方法是静态方法,因此简单工厂模式又被称为静态工厂方法)
3.工厂方法模式(Factory Method Pattern)
定义一个用于创建对象的接口,让子类实现该接口时实例化某个产品类(便于增加产品类时满足开闭原则)
4.抽象工厂模式(Abstract Factory Pattern)
一般有多个工厂类,这多个工厂类有共同父类,每一个具体工厂都提供多个工厂方法用于产生多种不同类型的产品,这些产品构成了一个产品族
5.原型模式(Prototype Pattern)
一个实例通过克隆创建一个新的对象
6.建造者模式(Builder Pattern)
指定复杂对象的类型和内容后,建造者就可创建一个完整的复杂复杂产品
7.适配器模式(Adapter Pattern)
将一个接口转换成客户希望的另一个接口,使接口不兼容的那些类可以一起工作
8.桥接模式(Bridge Pattern)
将抽象部分与它的实现部分分离,使它们都可以独立地变化
比如抽象部份是绘图,实现部份是绘各种图
9.组合模式(Composite Pattern)
组合多个对象形成树形结构以表示具有“整体-部分”关系的层次结构
比如一个公司组织的树形结构,行政人员下发通知时只需要选择一个根节点即可将通知的下发至下层所有人员
10.装饰模式(Decorator Pattern)
在不改变一个对象本身功能的基础上给对象增加额外的新行为
11.外观模式(Facade Pattern)
每个客户端如要和多个子系统进行复杂的交互,系统的耦合度将很大。增加一个外观角色之后,客户端只需直接与外观角色交互,从而降低了系统的耦合度
12.享元模式(Flyweight Pattern)
将大量细粒度对象以共享方式复用
13.代理模式(Proxy Pattern)
给某个对象提供一个代理,并由代理对象控制对原对象的引用
14.职责链模式(Chain of Responsibility Pattern)
避免将请求发送者与接收者耦合在一起,让多个对象都有机会接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止
15.命令模式(Command Pattern)
命令模式将发送者和接收者完全解耦,发送者和接收者间通过命令对象来关联操作
16.解释器模式(Interpreter Pattern)
定义一个语言的文法,并建立一个解释器来解释该语言中的句子
17.迭代器模式(Iterator Pattern)
提供一种方法来访问聚合对象,而不用暴露这个对象的内部结构
18.中介者模式(Mediator Pattern)
将多个对象间的复杂交互改为只与一个中介对象的简单交互
19.备忘录模式(Memento Pattern)
在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象外保存这个状态,这样可以在以后将对象恢复到原先保存的状态
20.观察者模式(Observer Pattern)
定义对象之间的一种一对多依赖关系,使得每当一个对象状态发生改变时,其相关依赖对象得到通知并被自动更新
21.状态模式(State Pattern)
允许一个对象在其内部状态改变时改变它的行为
22.策略模式(Strategy Pattern)
定义一系列算法类,将每一个算法封装起来,并让它们可以相互替换
23.模板方法模式(Template Method Pattern)
使子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤
24.访问者模式(Visitor Pattern)
提供一个作用于某对象结构中的中元素的操作表示,它使得可以在不改变各元素的类的前提下定义作用于这些元素的新操作