大胖的部落格

Just a note

  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  112 随笔 :: 0 文章 :: 3 评论 :: 0 Trackbacks
创建型模式(5种)

Factory Method 工厂方法
描述:对象的创建通过另一个工厂类来实现,工厂的抽象基类声明创建方法,派生类根据创建对象的不同override该方法,对象的创建实际上时在工厂派生类中实现。
优点:用户创建对象的代码可以用工厂抽象基类类型的指针调用创建方法来实现,当对象改变时,用户代码不变。

Abstract Factory 抽象工厂
描述: 基于Factory Method模式,创建的对象由一种变为N种,工厂抽象基类声明N个创建方法分别创建这N种对象,每个工厂派生类override这N个创建方法,每种对象中的某类对象由某个具体的派生类工厂创建。
优点:派生类工厂创建的是某一类对象,适用于一个系列的对象的创建。

Builder 生成器
描述:复杂对象的创建可能包括每个部分的创建和将部分组合起来这两个步骤。将它们分别用builder和director来描述,builder负责创建每个部分,director负责将部分组合起来。
优点:适用于创建每个部分有很多变化,但将部分组合起来的算法不变的复杂对象。

Prototype 原型
描述:利用拷贝构造函数提供一个创建已存在对象的拷贝的方法。
优点:适用于创建已存在对象的拷贝,不需要重新输入繁琐的参数来创建对象。

Singleton 单件
描述:将构造函数私有,提供一个公有的访问私有static指向自身类型指针的方法,用户通过该方法访问全局唯一的该指针指向的对象。
优点:保证该类的对象只会实例化一次。


结构型模式(7种)

Adapter 适配器
描述:需求类里的接口需要实现,已有的实现类里的实现与需求接口不匹配。提供一个Adapter类,公有继承于需求类,override接口,私有继承于实现类或将实现类作为自己的成员,在override的接口里用已有的实现去满足需求。
优点:利用已有的实现去满足需求。

Bridge 桥接
描述:将抽象与实现分离,抽象部分的类里含有实现类的基类指针,抽象部分不需要具体的实现细节。
优点:当实现部分扩展时,抽象部分的代码不变。

Component 组合
描述:组合对象和单一对象都从同一类型派生,提供公有的操作方法。
优点:用户在操作时无需关心操作的到底是组合对象还是单一对象。

Decorator 装饰
描述:当需要扩展目标类的操作时,添加一个新的Decorator类,Decorator类和目标类都派生于同一基类,构造时传入基类指针,实际指向目标类对象。在需要扩展的操作函数中可以调用目标类的方法,然后添加扩展的操作。
优点:更加灵活地动态扩展目标子类。

Facade 外观
描述:Facade类提供的接口封装了其它类的操作,提供简单的接口,其它类类型指针为Facade的成员。
优点:将复杂的子系统操作封装成了简单的接口。

Flyweight 享元
描述:将对象的创建封装在另一个factory类里,factory保存已创建的对象指针列表,当需要显示一个对象内容时,查找列表,若存在则返回之,若不存在则创建了再返回之。
优点:当对象会被重复使用且只需要一份实例就足够时,采用Flyweight可以节约空间。

Proxy 代理
描述:派生类提供了基类接口的实现,创建一个Proxy类继承于基类,有一个派生类指针成员,override同样的接口,在接口的实现里创建原派生类对象,调用原派生类接口。
优点:使用Proxy类可以保证只有确实有必要时,才创建实现类的实例,而只创建Proxy类的实例却不去进行实际操作则不会创建实现类的实例。


行为模式(11种)

Chain of Responsibility 职责链
描述:每一个handler保存了一个handler指针,用来指向下一个handler,形成一个handler链。当一个handler收到一个request的时候,可以选择自己处理或者转给下一个handler处理。
优点:使多个对象都有机会处理请求,并可按优先级顺序排列处理者的顺序。

Command 命令
描述:将要调用的函数封装在一个Receiver类中,执行指令封装在Command类中,Command类有一个Receiver指针成员。执行指令里调用Receiver指针指向的对象里的函数。类似函数回调,在调用一个函数前,现在Command里注册,调用时直接调用Command里的Execute。
优点:将决定执行什么命令和开始执行命令分开,在Execute之前可以取消注册的命令。

Interpreter 解释器
---

Iterator 迭代器
描述:封装一个Iterator类,提供方法访问一个聚合对象中各个元素。
优点:这样可以对同一个聚合同时有多个遍历,不暴露该对象的内部表示。

Mediator 中介者
描述:用一个中介对象Mediator来封装其它对象之间的交互,每个其它类型的对象只与Mediator交互。每个其它类型对象都包含有同一个Mediator指针,Mediator中包含有所有其他类型对象指针。
优点:Mediator封装了对象间的交互,使对象间不需要相互引用。

Memento 备忘录
描述:创建一个Memento类,除了析构函数所有成员私有,将目标类声明为友元,目标类可以访问Memento私有成员写状态,读状态。
优点:在目标对象之外保存对象状态,可以使目标对象恢复到之前的状态。

Observer 观察者
描述:subject内部存放多个observer的指针,observer提供一个更新自身状态的接口供subject调用。当subject状态变化时,调用observer的更新接口。
优点:当一个subject的状态变化时,多个observer的状态可以跟着变化。

Template 模板
描述:基类中定义了一个算法的轮廓,算法每一步具体的实现留给了派生类。
优点:适用于算法的结构不变,而细节改变。

Strategy 策略
描述:基类声明算法,派生类分别对其进行不同的实现,用户使用基类指针调用算法。
优点:算法实现改变时,用户代码不变。

State 状态
描述:类的内部维护一个State类指针,函数实现都是调用State指向对象的函数,这样当State指向的对象改变时,类的函数实现也跟着改变了。
优点:将不同状态的行为分割开来。

Visitor 访问者
描述:目标类定义一个Accept方法,接受Visitor类型指针;Visitor类定义一个Visit方法,接受目标类型指针,Visit在Accept中被调用传入this指针;在该Visit方法中可以操作目标类的函数,不同的Visitor定义不同的Visit来实现对目标类的不同操作。
优点:不改变目标类的前提下,定义针对目标类的新操作。不同的Visitor定义不同的操作,调用目标类的Accept传入visitor即调用了新操作。

posted on 2009-06-15 11:25 大胖 阅读(663) 评论(0)  编辑 收藏 引用 所属分类: Design Pattern

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理