设计模式理解

//
ITERATOR:
思想:将对列表的访问和遍历从列表对象中分离出来并放入一个Iterator对象中。
心得:列表和Iterator是对象无关的,所以列表中存放的对象通过模板实现。
 
Memento:
思想:对象和以前的状态分开,以前的每个状态都是一个对象。
心得:以前的n个状态和对象分开,需要哪个状态就用那个状态对象。
 
 
wrapper facades Pattern:
和facade功能上的区别主要就是复数,也就是多个facade。一般都有一个接口基类定义facade接口,子类来实现不同的facade。如不同OS的Socket。
结构上类似Bridge。
在每个facade地实现上用了adapter。
 
Abstract Factory和Factory Method:
如果AF只有一个产品,结构就简化成和FM一样拉。但他俩做的事情是不一样的。
AF侧重一个factory创建一套产品,而FM的一个子类只创建一个产品。
 
State和Strategy的结构和思想基本一样,只是关注的问题不同。
State关注一个事物的多个state,state在这个事物中的转换,每个state下操作。
Strategy关注事物当前使用的strategy,每个strategy的操作。
总之,State关注多个state,Strategy关注一个strategy。
// 
 
//
对象创建型模式
ABSTRACT FACTORY(抽象工厂)
一个公司有两个工厂,分别生产一套汽车零件,零件是不同的,但生产流程是相同的。现在有一客户向公司下订单,公司根据客户来自动选择相应的工厂生产汽车零件。
BUILDER(生成器)
一个石油公司有两个工厂,一个是像胶厂,一个是天然气厂,生产流程是不同的。现在有一客户向公司下订单(石油,像胶,天然气),公司根据客户来自动选择相应的工厂生产。
FACTORY METHOD(工厂方法)
有一个客户模板,定义了客户的一些操作流程,如需求分析,下订单等等。不同的客户在同一个流程中会有不同的操作,如下订单,客户甲可能要订公司甲,而客户乙可能要订公司乙。
PROTOTYPE(原型)
相当有两个生产汽车的工厂,他们的发动机是不同的,但其它的是相同的(反正这俩工厂部分产品是不同的)。
现在有一装配厂(客户)要组装汽车,对他来说流程是一样的,只是进零件的工厂不同而已。
这样对装配厂是流程确定一样的,只是工厂不同。装配厂只要根据不同的工厂零件就可以组装出不同的汽车。
SINGLETON(单件)
控制只有一个实例存在。如一个公司只有一个财务部
 

结构型模式
ADAPTER(适配器)
CLASS ADAPTER
公司有一套操作流程接口(PUBLIC),客户也有一套流程(PRIVATE),公司针对每个客户的流程设计不同的流程。这样公司就适应了不同的客户。
INSTANCE ADAPTER
公司有一套操作流程接口(PUBLIC),客户也有一套流程,但客户只派出代表(PRIVATE)到公司,而没有对公司公开其流程,公司针对每个客户的代表的说法设计不同的流程。这样公司就适应了不同的客户。
BRIDGE(桥接)
接口和实现通过第三方(BRIDGE)进行联系
COMPOSITE(组合)
一个设备基类,一个组合设备子类。一台电脑包含显示器,键盘,主机等,而主机又包含硬盘,内存等。此时电脑和主机是组合设备子类的继承类,而显示器,键盘,硬盘,内存就是设备基类的继承类。就是说所有的设备都有共性,设置在设备基类中。
DECORATOR(装饰)
将基类的一个虚函数重载,调用父类该函数(通过父类对象指针)并加入其它操作。这就是装饰,在原有的基础上加操作
FACADE(外观)
客户和系统的接口(FACADE),简化系统的接口操作,集中到一个对外接口类上(FACADE)。将客户可能要进行的多次操作包装成FACADE的一个操作,同时支持客户定义操作对象。这样系统内的变化只体现在系统内和FACADE,而不会在客户层体现。简化客户操作
FLYWEIGHT(享元)
商品有好多的信息,但商店不可能给各个商品都附带详细的商品信息,而只是给该类商品的设置详细商品信息。一般每个商品都有条形码,商店只须根据商品条形码就可查商品的详细信息。
其实这就是将事物的共性提取出来,做为FLYWEIGHT共享。这样就可以节约空间。
PROXY(代理)
有Remote Proxy(远程操作,封装), Virtual Proxy(控制大对象创建), Protection Proxy(访问控制), Smart Reference(附加操作)
 

结构型模式
CHAIN OF RESPONSIBILITY(职责链)
一条消息响应相应机制。如SARS,是市->省->中央。是个树,从叶到根。一般每个叶上有上层结点的联系方式。
COMMAND(命令)
将一个COMMAND封装为一个对象,实现对COMMAND的管理。实现延时和可撤消等操作
INTERPRETER(解释器)
解释运行,用于PATTERN MATCH(模式适配)和执行代码
ITERATOR(迭代器)
提供一种方法顺序访问一个聚合对象中各个元素, 而又不需暴露该对象的内部表示。特别用于模板。
如CArray,里面元素是不定的,但提取方法是一定(arrInt(nIndex));
MIDIATOR(中介者)
用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。但MIDIATOR最好不要太复杂。
二国之间的外交是通过元首(MIDIATOR)来完成的,而不是国民。
MEMENTO(备忘录)
在对象之外保存这个对象的状态。可以使对象恢复成保存时的状态。
OBSERVER(观察者)
定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时, 所有依赖于它的对象都得到通知并被自动更新。
如一个文档对应多个视图。当文档变了时每个视图就都得到更新。
STATE(状态)
对象内部有状态分支,根据对象当前的状态选择相应的操作。
STRATEGY(策略)
定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。本模式使得算法可独立于使用它的客户而变化。
就是一个算法基类,有多个算法子类。根据客户的选择用不同的算法子类。
TEMPLATE METHOD(模板方法)
定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。TEMPLATE METHOD使得子类可以不改变一个算法的结构即可重定义该法的某些特定步骤。
也就是说把算法中相同的部分在基类中完成,而将不同的部分根据不同的子类来实现不同的算法。
VISITOR(访问者)
提取出和类不相关但大部分类都需要的操作,作为VISITOR。VISITOR使得你可以将相关的操作集中起来定义在一个类中。当该对象结构被很多应用共享时,用VISITOR模式让每个应用仅包含需要用到的操作。
对对象设置VISITOR,然后再让对象干活(利用设置好的VISITOR)。
 
//
 
 
//

Create part :

  1. Abstract Factory : a set of class.
  2. Builder : a complex algorithm to create object.  Create algorithm(director) and implement function(builder) are separated.
  3. Factory Method : use this method in an operation. Implement FM in the inherited class.
  4. Prototype : every subclass implement clone() to return a copy of itself.
  5. Singleton : a distinct global class instance.

Construction part : change class compose relationship during the runtime.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值