中国 - 喜马拉雅

       Let life be beautiful like summer flowers . . .

随笔分类 -  设计模式

常用设计模式积累
设计模式小结
摘要:1. 单件模式 单件模式是允许一个类有且仅有一个实例的方法。 2. 命令模式 命令模式将每个命令,也就是函数封装为“函数对象”,以便将其以参数的形式传递给其他函数或对象,告诉它们要执行特定的操作。命令模式中所有的“命令”都会被执行。 3. 代理模式 代理模式强调的是“代理”,它只有一个实现类,代理类控制对其实现类的访问。 4. 状态模式 状态模式虽然也有“代理”,但它可以有多个实现类... 阅读全文
posted @ 2012-10-07 16:18 chinaxmly 阅读(246) 评论(0) 推荐(0)
访问者模式
摘要:用访问者模式进行多重派遣 访问者模式(Visitor)的目标是将继承层次结构上的操作与这个层次结构本身分开。这是一个相当古怪的动机,因为在向对象编程中所做的大部分工作是将数据和操作组合在一起形成对象,并利用多态性根据对象的确切类型自动选择操作的正确变化。 利用访问者模式将操作从类的继承层次结构中提取出来置入一个独立的外部层次结构。“主层次结构”包含一个函数visit(),该函数接受任何来自操作... 阅读全文
posted @ 2012-10-07 16:13 chinaxmly 阅读(311) 评论(0) 推荐(0)
观察者模式
摘要:观察者(Observer)模式用于解决一个相当常见的问题:当某些其它对象改变状态时,如果一组对象需要进行相应的更新,那么应该如何处理呢?这可以在“文档-视图设计模式”中见到。假定有一些数据(即“文档”)和两个视图:一个图形视图和一个文本视图。在更改“文档”数据时,必须通知这些视图更新他们自身,这就是观察者模式所要完成的任务。 // Observer.h// The Observer interf... 阅读全文
posted @ 2012-10-05 17:42 chinaxmly 阅读(317) 评论(0) 推荐(0)
构建器模式
摘要:构建器模式用于创建复杂对象。GoF指出,构建器模式和抽象工厂模式主要的区别就就是,构建器模式一步步创建对象,所以及时展开输出创建过程似乎很重要。此外“主管(BicycleTechnician)”获得一个切片的流(stream),次且将这些切片传递给构建器,每个切片用来执行创建过程中的一步。 下面有一个例子,作为模型的一辆自行车按照其类型(山地车、旅行车或赛车)来选择零部件组装一辆自行车。一个构建... 阅读全文
posted @ 2012-10-02 21:12 chinaxmly 阅读(374) 评论(0) 推荐(0)
虚构造函数
摘要:使用工厂方法模式的主要目标之一就是更好地组织代码,使得在创建对象时不需要选择准确的构造函数类型。也就是说,可以告诉工厂:“现在还不能确切地知道需要什么类型的对象,但是这里有一些信息。请创建类型适当的对象。” 此外,在构造函数调用期间,虚拟机制并不起作用(发生早期绑定)。在某些情况下这是很棘手的事情。例如,在Shape程序中,在Shape对象的构造函数内部建立一既需要的东西然后由draw()给制S... 阅读全文
posted @ 2012-10-02 15:08 chinaxmly 阅读(781) 评论(0) 推荐(0)
抽像工厂模式
摘要:抽像工厂(Abstract Factory)模式看起来和前面看到的工厂方法很相似,只是他使用若干工厂方法(Factory Method)模式。每个工厂方法模式创建一个不同类型的对象。当创建一个工厂对象时,要决定将如何使用由那个工厂创建的所有对象。 假设要创建一个通用的游戏环境,并且希望它能支持不同类型的游戏。请看以下程序是如何使用抽象工厂模式的: #include <iostream>usin... 阅读全文
posted @ 2012-10-02 10:20 chinaxmly 阅读(283) 评论(2) 推荐(0)
多态工厂模式
摘要:在工厂模式的例子中,静态成员函数static factory()迫使所有创建对象的操作都集中在一个地方,因此这个地方就是唯一需要修改代码的地方。然而,GoF强调工厂方法模式的理由是,可以使不同类型的工厂派生自基本类型的工厂。工厂方法模式事实上是多态工厂模式的一个特例。 #include <iostream>#include <map>#include <string>#include <vect... 阅读全文
posted @ 2012-10-01 18:42 chinaxmly 阅读(1245) 评论(0) 推荐(0)
工厂模式
摘要:工厂模式强制用一个通用的工厂(factory)来创建对象,而不允许将创建对象的代码散布于整个系统。如果程序中所有需要创建对象的代码都转到这个工厂执行,那么再增加新对象时的所要做的全部工作就是只需修改工厂。这种设计是众所周知的工厂方法的一种变体。 #include <iostream>#include <stdexcept>#include <cstddef>#include <string>#i... 阅读全文
posted @ 2012-10-01 16:48 chinaxmly 阅读(210) 评论(0) 推荐(0)
职责链模式
摘要:职责链(Chain of Responsibility)模式:在提出一个请求时,一个链序列中的每个策略都试图满足这个请求。这个过程直到有一个策略成功满足该调用或者到达链序列的末尾才结束。 除了调用一个函数来满足某个请求外,链中的多个函数都有机会满足这个请求,因此它有点专家系统的意味。由于职责链实际上就是一个链表,它能够动态创建,因此它可以看做是一个更一般的动态构建的switch语句。 在这里可... 阅读全文
posted @ 2012-10-01 12:54 chinaxmly 阅读(218) 评论(0) 推荐(0)
策略模式
摘要:模版方法模式是“坚持相同的代码”,而被覆盖的函数是“变化的代码”。然而,这种变化在编译时通过继承被固定下来。按照“组合优于继承”的格言,可以利用组合来解决将变化的代码从“坚持相同的代码”中分开的问题,从而产生策略(Strategy)模式。这种主法有一个明显的好外:在程序运行时,可以插入变化的代码。策略模式也加入了“语境”,它可以是一个代理类,这个类控制着对特定策略对像的选择和使用——就像状态模式一... 阅读全文
posted @ 2012-10-01 12:16 chinaxmly 阅读(393) 评论(0) 推荐(0)
模版方法模式
摘要:应用程序结构框架允许从一个或一组类中继承以便创建一个新的应用程序,重用现存类中几乎所有的代码,并且覆盖其中一个或多个函数以便自定义所需要的应用程序。应用程序结构框架中的一个基本的概念是模版方法(Template Method)模式,它很典型地隐藏在覆盖的下方,通过调用基类的不同函数(这时覆盖了其中一些函数以创建应用程序)来驱动程序运行。 模版方法的一个重要特征是它的定义在基类中(有时作为一个私有... 阅读全文
posted @ 2012-09-30 23:30 chinaxmly 阅读(205) 评论(0) 推荐(0)
适配器模式
摘要:适配器(Adapter)模式接受一种类型并提供一个对其他类型的接口。This is useful when you’re given a library or piece of code that has a particular interface, and you’ve got a second library or piece of code that uses the same basic... 阅读全文
posted @ 2012-09-30 22:55 chinaxmly 阅读(436) 评论(0) 推荐(0)
状态模式
摘要:状态模式产生一个可以改变其类的对象,当发现大多数或者所有函数中都存在有条件的代码时,这种模式很有用。和代理模式一样,这种模式通过一个前端对象来使后端实例对象履行其职责。然而,在前端对象生存其间,状态模式从一个实现对象到另一个实现对象进行切换,以实现对于相同函数调用产生不同的行为。 例如,在青蛙王子童话中,青蛙王子依照其所处的状态而有不同的行为。先通过测试一个bool变量来实现: // Kiss... 阅读全文
posted @ 2012-09-30 21:07 chinaxmly 阅读(278) 评论(0) 推荐(0)
代理模式
摘要:代理(Proxy)模式和状态(State)模式都提供一个代理(Surrogate)类。代码与代理类打交道,而做实际工作的类隐藏在代理类背后。当调用代理类中的一个函数时,代理类仅转而去调用实现类中相应的函数, 代理模式和状态模式的区别很简单:代理模式只有一个实现类,而状态模式可以有多个实现。代理模式和状态模式的应用也不相同:代理模式控制其对实现类的访问,而状态模式动态地改变其实现类。 #incl... 阅读全文
posted @ 2012-09-30 20:30 chinaxmly 阅读(359) 评论(0) 推荐(0)
命令模式
摘要:命令模式就是一个函数对像:一个作为对象的函数。通过将函数封装为对象,就能够以参数的形式将其传递给其他函数或都对象,告诉它们在履行请求的过程中执行特定的操作。可以说,命令模式是携带行为信息的信使。 #include <iostream>#include <vector>using namespace std;class Command {public: virtual void execute()... 阅读全文
posted @ 2012-09-30 19:48 chinaxmly 阅读(306) 评论(0) 推荐(0)
单件模式
摘要:单件模式,是允许一个类有且仅有一个实例的方法。 #include <iostream>using namespace std;class Singleton { static Singleton s; // 创建静态对象 int i; Singleton(int x) : i(x) { } // 禁止构造函数 Singleton(const Singleton&); /... 阅读全文
posted @ 2012-09-30 18:02 chinaxmly 阅读(281) 评论(0) 推荐(0)