首页 > 代码库 > 1.0设计模式概述
1.0设计模式概述
一.什么是设计模式
Christopher Alexander说过:每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心。这样,你就能一次又一次地使用该方案而不必做重复劳动。在面向对象的解决方案里,我们用对象和接口代替了墙壁和门窗。两类的核心都在于提供了相关问题的解决方案。设计模式确定了所包含的的类和实例,它们的角色、协作方式以及职责分配。
二.设计模式的四个基本要素
A、模式名称(pattern name):助记名,用一两个词来描述模式的问题、解决方案和效果。
B、问题(problem):描述了应该在何时使用模式。
C、解决方案(solution):描述了设计的组成成分,它们之间的相互关系及各自的职责和协作方式。
D、效果(consequences):描述了模式应用的效果及使用模式应权衡的问题。
三.设计模式的编目(23个设计模式)(按各自分类下的最易 稍难 较难,最常用的为红色背景,有时用的为黄色背景,很少用的无背景)
说明:
类模式:处理类和子类之间的关系,这些关系通过继承建立,是静态的,在编译时刻便确定下来了。
对象模式:处理对象间的关系,这些关系在运行时刻是可以变化的,更具动态性。
对象创建型模式(Creational):与对象或类的创建有关。将对象/类的部分创建工作延迟到子类/另一个对象中。
A、Singleton(单例、单件):保证一个类仅有一个实例,并提供一个访问它的全局访问点。
B、Prototype(原型):用原型实例指定创建对象的种类,并且通过拷贝这个原型来创建新的对象。
//////////////////////////////////////////////////////////////////////////////////////////////////////////
C、Factory Method(工厂方法)(类创建型模式):定义一个用户创建对象的接口,让子类决定将哪一个类实例化。Factory Method使一个类的实例化延迟到其子类。
D、Abstract Factory(抽象工厂):提供一个创建一些列相关或相互依赖对象的接口,而无需指定它们具体的类。
E、Builder(生成器):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
对象结构型模式(Structural):处理类或对象的组合。使用继承机制来组合类;描述了对象的组装方式。
F、Facade(外观):为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
//////////////////////////////////////////////////////////////////////////////////////////////////////////
G、Decorator(装饰):动态地给一个对象添加一些额外的职责。就扩展功能而言 ,Decorator模式比生成子类方式更为灵活。
H、Adapter(适配器)(类对象结构型):将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些了类可以一起工作。
I、Proxy(代理):为其他对象提供一个代理以控制对这个对象的访问。
//////////////////////////////////////////////////////////////////////////////////////////////////////////
G、Composite(组成、组合):将对象组合成树形结构以表示“整体-部分”的层次结构。Composite使得客户对单个对象和复合对象的使用具有一致性。
K、Bridge(桥接):将抽象部分与它的实现部分分离,使他们都可以独立地变化。
L、Flyweight(享元、轻量):运用共享技术有效的支持大量细粒度的对象。
对象行为模式(Behavioral):对类或对象怎样交互和怎样分配职责进行描述。类模式使用继承描述算法和控制流。对象模式则描述一组对象怎样协作完成单个对象所无法完成的任务。
M、Mediator(中介者):用一个中介对象来封装一系列的对象交互。中介者使各个对象不需要显示的相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。
//////////////////////////////////////////////////////////////////////////////////////////////////////////
N、Strategy(策略):定义一系列的算法,把它们一个个封装起来,并且使它们可相互转换。本模式使得算法的变化可独立于使用它的客户。
O、Observer(观察者):定义对象间的一种一对多的依赖关系,并在该对象发生改变时,所有依赖于它的对象都得到通知并自动刷新。
P、Template Method(模板方法)(类行为型模式):定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
Q、Iterator(迭代器):提供一种方法顺序访问一个聚合对象中的各个元素,而又不需要暴露该对象的内部表示。
R、State(状态):允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它所属的类。
S、Chain of Responsibility(职责链、责任链):为解除请求的发送者和接受者之间的耦合,而使多个对象都有机会处理这个请求。将这次对象连成一条链,并沿着这条链传递该请求,知道有一个对象处理它。
//////////////////////////////////////////////////////////////////////////////////////////////////////////
T、Command(命令):将一个请求封装为一个对象,从而可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可取消的操作。
U、Interpreter(解释器)(类行为型模式):给定一个语言,定义它的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中的句子。
V、Memento(备忘录):在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这种状态。这样以后就可将该对象恢复到保存的状态。
W、Visitor(访问者):表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。
四.描述设计模式(为了达到设计复用,我们必须同时记录设计产生的决定过程、选择过程和权衡过程。江永统一的格式描述设计模式,每一个模式根据以下的末班被分成若干部分。模板具有统一的信息描述结构,有助于更容易的学习、比较和使用设计模式)
模板名和分类
简洁的描述了模板的本职。一个号的名字非常重要,因为它将围城你的设计词汇表的一部分。
意图
是回答下列问题的简单陈述:设计模式是做什么的?它的基本原理和意图是什么?它解决的是什么样的特定设计问题?
别名
模式的其他名称。
动机
用以说明一个设计问题以及如何用模式中的类、对象来解决该问题的特定情景。该情景会帮助你理解随后对模式更抽象的描述。
适用性
什么情况下可以使用设计模式?该模式可用来改进哪些不良设计?你怎样识别这些情况?
结构
采用基于对象建模技术的表示法对模式中的类进行图形描述。我们也使用了交互图来说明对象之间的请求序列和协作关系。
参与者
智设计模式中的类和/或对象以及它们各自的职责
协作
模式的参与者怎样协作以实现它们的职责。
效果
模式怎样支持它的目标?使用模式的效果和所需做的权衡取舍?系统结构的那些方面可以独立改变
实现
实现模式时需要知道的一些提示、技术要点及应避免的缺陷,以及是否存在某些特定于实现语言的问题。
已知应用
实际系统中发现的模式的例子。每个模式至少包括了两个不同领域的实例。
相关模式
与这个模式紧密相关的模式有哪些?其间重要的不同之处是什么?这个模式应与哪些其他模式一起使用?
1.0设计模式概述