您的位置:首页 > 其它

设计模式系列一 设计模式介绍

2015-01-04 00:00 423 查看
摘要: 设计模式介绍

一、模式的定义:模式是在某情景(context)下,针对某问题的某种解决方案。(另解:另如果你发现自己处于某个情景下,面对着所欲达到的目标被一群约束影响着的问题,然而,你能够应用某个设计,克服这些约束并达到该目标,将你领向某个解决方案。)

情景就是应用某个模式的情况,这应该是会不断出现的情况。

问题就是你想在某情景下达到的目标,但也可以是某情景下的约束。

解决方案就是你所追求的:一个通用的设计,用来解决约束,达到目标。‍

模式简要描述
装饰者包装一个对象,以提供新的行为
状态封装了基于状态的行为,并使用委托在行为之间切换
迭代器在对象的集合之中游走,而不暴露集合的实现
外观简化一群类的接口
策略封装可以互换的行为,并使用委托来决定要使用哪一个
代理包装对象,以控制对此对象的访问
工厂方法由子类决定要创建的具体类是哪一个
抽象工厂允许客户创建对象的家族,而无需指定他们的具体类
适配器封装对象,并提供不同的接口
观察者让对象能够在状态改变时被通知
模版方法由子类决定如何实现一个算法中的步骤
组合客户用一致的方式处理对象集合和单个对象
单例确保有且只有一个对象被创建
命令封装请求成为对象
二、在大多数的模式类目中,模式通常根据某种做法被归为几类。

最广为认知的分类方式是根据模式的目标分成三个不同类目:创建型,行为型和结构型。

类别成员
创建型模式涉及到将对象实例化,这类模式都提供一个方法,将客户从所需要实例化的对象中解耦。单例(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)
三、模式不是万能的,使用时多思考,用模式思考:

1、保持简单。当你设计时,尽可能的用简单的方式解决问题。你的目标应该是简单,而不是”如何在这个问题中应用模式“。

2、设计模式非万灵丹,事实上,连什么丹都算不上。你需要考虑到模式对你的设计中其他部分所造成的后果。

3、你要知道何时需要模式。当你在设计的时候,如果确定在你的设计中可以利用某个模式解决某个问题,那么就使用这个模式!如果有更简单的解决方案,那么在决定使用模式之前应该先考虑这个方案。

4、重构的时间就是模式的时间。重构就是通过改变你的代码来改进它的组织方式的过程。目标是要改善其结构,而不是其行为。这是一个很好的时机,可以重新检查你的设计来看看是否能够利用模式让它拥有更好的结构。

5、拿掉你所不需要的模式,不要害怕将一个设计模式从你的设计中删除。

6、如果你现在不需要模式,就别做。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  设计模式介绍