创建型模式
简单工厂模式 Simple Factory
根据参数返回具有同样方法的对象,这些对象可以派生自相同的基类也可以没有任何关系。但这些对象的方法接口必须是兼容的,这才能替换使用
工厂方法模式 Factory Method
由给定的参数决定具体要实例化哪个类,一般都是对string进行switch判别。C#中可以采用反射来改写。
抽象工厂模式 Abstract Factory
连工厂和对应的产品线都可以整套换的,可以认为是Factory Method的组合。
单件模式 Singleton
这个比较简单,用的也是很多的。一般有一个静态对象持有者来保持全局唯一对象。
生成器模式 Builder
将复杂对象的创建过程和它的表示分离。这样就可以采用相同的创建过程创建不同的对象了。
原型模式 Prototype
实现Clone接口,这样对象就可以拷贝了,很简单那。
结构型模式
适配器模式 Adapter
一般用于实现新老系统时间的兼容性适配。一般都是继承自老命令承载者,聚合新命令承载者,然后重写接口实现,将命令转发给新的命令承载者。
桥接模式 Bridge
将类的接口抽象出来,把实现独立,这样可以实现运行时的对象替换。Strategy策略模式可以实现具体方法的替换,State可以实现字段的动态替换,Template Method可以实现方法片段的动态替换。
组合模式 Composite
最经典的就是目录结构。一个抽象的Node,一个继承自Node的非叶节点、一个继承自Node的叶节点。
装饰模式 Decorator
在组合模式的基础上,实现了行为的动态组合
外观模式 Façade
把复杂系统重新封装一个统一的接口,这样外部调用时就不用关心系统很多个类的接口了,而只要关系这一个Facade接口
享元模式 Flyweight
其实就是弱引用或者说是字符串池的实现。把昂贵的对象共享起来。
代理模式 Proxy
通过代理来屏蔽底层具体的应用。经典的有远程代理,弱引用或者其他要求简单的实现对象访问而不想关心底层详细实现的情景。
行为型模式
职责链模式 Chain of Responsibility
把事件发往一个处理链,依次进行处理加工。经典的有win消息的处理流程。
命令模式 Command
将所有的操作抽象为统一的命令对象。这样可以轻松实现Undo和Redo的效果。也可以将Command对象保存起来,这样软件的行为就可以重放了。
解释器模式 Interpreter
实现结构上和Composite模式很像
迭代器模式 Iterator
这个东西很多语言都有支持,可以屏蔽底层具体的实现。比如iterator在C++的非线性容器中可以屏蔽具体的数据结构,C#中的foreach也是通过iterator模式实现的
中介者模式 Mediator
备忘录模式 Memento
把对象的数据拿出来存到另外一个对象中,然后在适当的时候执行序列化和反序列化以实现对象的恢复。和State有点像,不过State的目的在于动态替换数据,而Momento在于对象的状态记忆。
观察者模式 Observer
设计上有支持多播的能力。
状态模式 State
把对象内部的不同状态封装成不同的类,这样就可以实现对象内部的字段动态改变的能力,这些封装成为State,这些State可以在运行时被动态的替换。
策略模式 Strategy
这个东西通常在不同算法的替换上用的比较多。State模式实现了对象字段的动态替换,Stratery实现了对象方法的动态替换。
模板方法模式 Template Method
实现对象动态行为改变的另外一种设计模式。和Strategy模式有点像,不过TemplateMethod更注重的是把行为片段延迟到子类中实现,而行为的框架在基类中写死了。Strategy就压根是完全依赖与子类了。
访问者模式 Visitor
评论