设计模式系列一 设计模式介绍
2015-01-04 00:00
423 查看
摘要: 设计模式介绍
一、模式的定义:模式是在某情景(context)下,针对某问题的某种解决方案。(另解:另如果你发现自己处于某个情景下,面对着所欲达到的目标被一群约束影响着的问题,然而,你能够应用某个设计,克服这些约束并达到该目标,将你领向某个解决方案。)
情景就是应用某个模式的情况,这应该是会不断出现的情况。
问题就是你想在某情景下达到的目标,但也可以是某情景下的约束。
解决方案就是你所追求的:一个通用的设计,用来解决约束,达到目标。
二、在大多数的模式类目中,模式通常根据某种做法被归为几类。
最广为认知的分类方式是根据模式的目标分成三个不同类目:创建型,行为型和结构型。
还有另一种分类方式:类模式和对象模式
三、模式不是万能的,使用时多思考,用模式思考:
1、保持简单。当你设计时,尽可能的用简单的方式解决问题。你的目标应该是简单,而不是”如何在这个问题中应用模式“。
2、设计模式非万灵丹,事实上,连什么丹都算不上。你需要考虑到模式对你的设计中其他部分所造成的后果。
3、你要知道何时需要模式。当你在设计的时候,如果确定在你的设计中可以利用某个模式解决某个问题,那么就使用这个模式!如果有更简单的解决方案,那么在决定使用模式之前应该先考虑这个方案。
4、重构的时间就是模式的时间。重构就是通过改变你的代码来改进它的组织方式的过程。目标是要改善其结构,而不是其行为。这是一个很好的时机,可以重新检查你的设计来看看是否能够利用模式让它拥有更好的结构。
5、拿掉你所不需要的模式,不要害怕将一个设计模式从你的设计中删除。
6、如果你现在不需要模式,就别做。
一、模式的定义:模式是在某情景(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、如果你现在不需要模式,就别做。
相关文章推荐
- 【设计模式系列】设计模式读书笔记——主流设计模式的简单介绍
- 本文详细介绍Python 设计模式系列之二: 创建型 Simple Factory 模式(转载)
- 设计模式系列三 装饰者模式介绍
- 设计模式系列四 工厂(工厂方法、抽象工厂)模式介绍
- 设计模式系列十 迭代器模式 组合模式介绍
- 设计模式系列十二 状态模式介绍
- 设计模式系列1-为什么要用设计模式
- 设计模式系列二 观察者模式介绍
- 设计模式系列八 外观模式介绍
- 设计模式系列十三 代理模式介绍
- 设计模式系列:(0)介绍
- 设计模式系列六 命令模式介绍
- 设计模式系列七 适配器模式介绍
- 设计模式系列五 单例模式介绍
- 设计模式系列九 模板方法模式介绍
- MVC设计模式(模型-视图-控制器)设计模式介绍(ZZ)
- Webcast:C#面向对象设计模式纵横谈系列课程
- [用设计模式锻炼C#系列]之Builder
- 关于设计模式系列的文章问题
- terrylee的设计模式系列之道(转),博客园的一位高手设计模式解说