1、模式的定义:模式是在某情景(context)下,针对某问题的某种解决方案。(另解:另若是你发现本身处于某个情景下,面对着所欲达到的目标被一群约束影响着的问题,然而,你可以应用某个设计,克服这些约束并达到该目标,将你领向某个解决方案。)算法
情景就是应用某个模式的状况,这应该是会不断出现的状况。设计模式
问题就是你想在某情景下达到的目标,但也能够是某情景下的约束。ui
解决方案就是你所追求的:一个通用的设计,用来解决约束,达到目标。spa
模式 | 简要描述 |
装饰者 | 包装一个对象,以提供新的行为 |
状态 | 封装了基于状态的行为,并使用委托在行为之间切换 |
迭代器 | 在对象的集合之中游走,而不暴露集合的实现 |
外观 | 简化一群类的接口 |
策略 | 封装能够互换的行为,并使用委托来决定要使用哪个 |
代理 | 包装对象,以控制对此对象的访问 |
工厂方法 | 由子类决定要建立的具体类是哪个 |
抽象工厂 | 容许客户建立对象的家族,而无需指定他们的具体类 |
适配器 | 封装对象,并提供不一样的接口 |
观察者 | 让对象可以在状态改变时被通知 |
模版方法 | 由子类决定如何实现一个算法中的步骤 |
组合 | 客户用一致的方式处理对象集合和单个对象 |
单例 | 确保有且只有一个对象被建立 |
命令 | 封装请求成为对象 |
2、在大多数的模式类目中,模式一般根据某种作法被归为几类。prototype
最广为认知的分类方式是根据模式的目标分红三个不一样类目:建立型,行为型和结构型。设计
类别 | 成员 |
建立型模式涉及到将对象实例化,这类模式都提供一个方法,将客户从所须要实例化的对象中解耦。 | 单例(singleton),建造(builder),原型(prototype),抽象工厂(abstract factory),工厂方法(factory method) |
行为型模式,涉及到类和对象如何交互及分配职责。 | 中介者(mediator),访问者(visitor),模板方法(template method),迭代器(iterator),命令(command),备忘录(memento),解释器(interpreter),观察者(Observer),职责链(chain of responsibility) |
结构型模式可让你把类或者对象组合到更大的结构中。 | 代理(proxy),装饰(decorator),外观(facade),组合模式(composite),适配器(adapter),桥接(bridge),享元(flyweight) |
还有另外一种分类方式:类模式和对象模式代理
类别 | 成员 |
类模式描述类之间的关系如何经过继承定义。类模式的关系是在编译时创建的。 | 模板方法(template method),工厂方法(factory method),适配器(adapter),解释器(interpreter) |
对象模式描述对象sd的关系,并且主要是利用组合定义。对象模式的关系一般在运行时创建,并且更加动态、更有弹性。 | 单例(singleton),建造(builder),原型(prototype),抽象工厂(abstract factory),中介者(mediator),访问者(visitor),迭代器(iterator),命令(command),备忘录(memento),解释器(interpreter),观察者(Observer),职责链(chain of responsibility),代理(proxy),装饰(decorator),外观(facade),组合模式(composite),桥接(bridge),享元(flyweight)server |
3、模式不是万能的,使用时多思考,用模式思考:对象
一、保持简单。当你设计时,尽量的用简单的方式解决问题。你的目标应该是简单,而不是”如何在这个问题中应用模式“。继承
二、设计模式非万灵丹,事实上,连什么丹都算不上。你须要考虑到模式对你的设计中其余部分所形成的后果。
三、你要知道什么时候须要模式。当你在设计的时候,若是肯定在你的设计中能够利用某个模式解决某个问题,那么就使用这个模式!若是有更简单的解决方案,那么在决定使用模式以前应该先考虑这个方案。
四、重构的时间就是模式的时间。重构就是经过改变你的代码来改进它的组织方式的过程。目标是要改善其结构,而不是其行为。这是一个很好的时机,能够从新检查你的设计来看看是否可以利用模式让它拥有更好的结构。
五、拿掉你所不须要的模式,不要惧怕将一个设计模式从你的设计中删除。
六、若是你如今不须要模式,就别作。