设计模式学习笔记–设计模式概述
定义
设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的;设计模式使代码编制真正工程化;设计模式是软件工程的基石脉络,如同大厦的结构一样。
组成要素
设计模式一般包含模式名称、问题、目的、解决方案、效果等组成要素。其中关键要素为:
模式名称
方便开发人员之间的交流
问题
模式适用的条件,存在的问题,问题的原因
解决方案
描述了设计模式的组成部分,这些组成部分间的相互关系、各自职责、协作方式,通常通过UML与核心代码进行描述
效果
描述了模式的优缺点以及使用时应权衡的问题
分类
根据它们的用途分为:
创建型
创建型模式主要用于描述如何创建对象,将对象的创建和使用分离,在使用对象时无需关心对象的创建细节,从而降低系统的耦合度,让设计方案更易于修改和扩展。
解决方案三要素:
- 创建什么
- 由谁创建
- 何时创建
包括:
单例模式(Singleton Pattern)
确保某一个类只有一个示例,而且自行实例化并向整个系统提供这个示例
简单工厂模式(Simple Factory Pattern)
定义一个工厂类,它可以根据参数的不同返回不同类的实例,被创建的实例通常都具有共同的父类
工厂方法模式(Factory Method Pattern)
定义一个用于创建对象的接口,让子类决定实例化哪一个类
抽象工厂模式(Abstract Factory Pattern)
提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类
原型模式(Prototype Pattern)
使用原型实例指定创建对象的种类,并且通过复制这些原型创建新的对象
建造者模式(Builder Pattern)
将一个复杂对象的创建与它的表示分离,使得同样的构建过程可以创建不同的表示
结构型
如何将现有的类或对象组合在一起形成更加强大的结构。不同的结构型模式从不同的角度来组合类或对象,在尽可能满足各种面向对象设计原则的同时,为类或对象的组合提供一系列巧妙的解决方案。
包括:
适配器模式(Adapter Pattern)
将一个接口转换成客户希望的另一个接口,使接口不兼容的那些类可以一起工作
桥接模式(Bridge Pattern)
将抽象部分与其实现部分分离,使它们都可以独立的变化
组合模式(Composite Pattern)
组合多个对象形成树形结构以表示具有“整体:部分”关系的层次结构
装饰模式(Decorator Pattern)
动态的给一个对象增加一些额外的职责
外观模式(Facade Pattern)
外部与一个子系统的通信通过一个统一的外观对象进行,为子系统中的一组接口提供一个一致的入口
享元模式(Flyweight Pattern)
运用共享技术有效的支持大量细粒度对象的复用
代理模式 (Proxy Pattern)
给某一对象提供一个代理,并由代理控制对原对象的引用
行为型
关注系统中对象之间的交互,研究系统在运行时对象之间的相互通信与协作,进一步明确对象的职责。行为模式不仅关注类和对象本身,还关注他们之间的相互作用和职责划分
包括:
职责链模式(Chain of Responsibility Pattern)
避免将请求发送者与接收者耦合在一起,让多个对象都有机会接收请求,将这些对象连成一条链,并且沿着这条链传递请求,直到有对象处理为止
命令模式(Command Pattern)
将一个请求封装为一个对象,从而可用不用的请求对客户进行参数化;队请求队列或记录请求日志,以及支持可撤销的操作
解释器模式(Interpreter Pattern)
定义一个语言的文法,并且建立一个解释器来解释该语言的句子
迭代器模式(Iterator Pattern)
提供一种方法来访问聚合对象,而不用暴露这个对象的内部表示
中介者模式(Mediator Pattern)
用一个中介对象来封装一系列的对象交互,中介者使个对象不需要显式的相互引用,从而使其耦合松散,而且可以独立改变它们之间的交互
备忘录模式(Memento Pattern)
在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样可以在以后将对象恢复到原先保存的状态
观察者模式(Observer Pattern)
定义对象之间的一种一对多依赖关系,使得每当一个对象状态状态发生改变时,其相关依赖对象皆得到通知并被自动更新
状态模式(State Pattern)、
允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类
策略模式(Strategy Pattern)
定义一系列算法类,将每一个算法封装起来,并让它们可以互相替换,使得算法的变化独立于使用它的客户
模板方法模式(Template Method Pattern)
定义一个操作算法的框架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构即可以重定义该算法的某些特定步骤
访问者模式(Visitor Pattern)
提供一个作用于某对象结构中的各元素的操作表示,使得可以在不改变个元素的类的前提下定义作用于这些元素的新操作