
设计模式
Nestler
这个作者很懒,什么都没留下…
展开
-
【设计模式】抽象工厂模式
抽象工厂模式是工厂方法模式的进一步强化。当工厂函数只需要产生一种类型的产品(所有产品都继承自同一抽象基类)时,使用工厂方法模式即可。但是,当用户程序需要创建多种类型的产品,而这些产品又有一定的内在联系,那么就要用到抽象工厂模式了。抽象工厂模式的UML图如下所示:AbstractProductA和AbstractProductB是两种不同类型的抽象产品,每种类中的抽象下面又有两种原创 2014-07-29 11:05:02 · 1277 阅读 · 0 评论 -
【设计模式】建造者模式
建造者模式:将复杂对象的建造过程抽象出来,使这个抽象过程的不同实现方法可以构造出不同属性的对象。当构造一个对象时,构造的流程是相同的,但每一个步骤对应的具体操作是有差异的。这时,可以将需要进行的初始化作为虚函数固定到一个抽象基类中,这个抽象基类称为抽象建造者类;而具体的实现则由派生类中重写的虚函数定义,这个派生类称为具体建造者类。有了具体的建造步骤,下一步就是要按顺序调用这些步骤,这是由一个称为指原创 2014-07-24 19:30:55 · 1056 阅读 · 0 评论 -
【设计模式】备忘录模式
备忘录模式:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样,以后就可以将该对象恢复到原先保存的状态。下面是一个用C++描述的备忘录模式的基本框架。#include #include using namespace std;// 备忘录class Memento {public: // 保存数据 Memento(const string &st原创 2014-08-03 21:53:42 · 1333 阅读 · 0 评论 -
【设计模式】代理模式
代理模式在所需对象和用户代码之间增加了一层对象,这个对象被称为代理。用户代码只需要直接操作代理对象即可。著名的代理模式的例子就是引用计数指针对象,它使得我们对真实对象的操作都需要经过引用计数指针对象。下面是用C++写的一个运用了代理模式的例子。#include #include using namespace std; // 作为接口的抽象基类class Subject {pu原创 2014-07-21 18:49:21 · 1008 阅读 · 0 评论 -
【设计模式】工厂方法模式
简单工厂模式的最大优点在于工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态实例化相关的类,对于客户端来说,去除了与具体产品的依赖。例如在简单工厂模式中出现的工厂函数:Operation* FactoryFunction(double left, double right, char op){ switch (op) { case '+': ret原创 2014-07-22 10:10:13 · 1135 阅读 · 0 评论 -
【设计模式】装饰模式
修饰模式是一种动态地往一个对象中添加新的行为的设计模式。继承是对现有类进行扩充,用来增加基类功能,该扩充动作是在编译期完成;而修饰模式是对一个对象进行扩充,从而达到修饰的目的,该修饰动作是在运行期完成。下面是一个用C++编写的关于描述一个人的示例程序,并使用了装饰模式。#include #include using namespace std; // Componentc原创 2014-07-19 16:11:40 · 1397 阅读 · 0 评论 -
【设计模式】单例模式
所谓单例模式,就是禁止用户代码实例化多个对象实例,保证单例对象的类只有一个实例存在。通过一个函数接口取用这个唯一实例,就能够控制对该实例的访问。下面是一个用C++编写的模拟单例模式的例子。#include #include using namespace std; class Singleton {public: Singleton() : m_str("Hello wor原创 2014-07-18 22:01:41 · 1002 阅读 · 0 评论 -
【设计模式】责任链模式
责任链模式是一种软件设计模式,它包含了一些命令对象和一系列的处理对象。每一个处理对象决定它能处理哪些命令对象,它也知道如何将它不能处理的命令对象传递给该链中的下一个处理对象。该模式还描述了往该处理链的末尾添加新的处理对象的方法。责任链模式的UML图如下:下面是一个用C++描述的责任链模式的例子:#include #include using namespace std原创 2014-08-11 09:33:32 · 1337 阅读 · 0 评论 -
【设计模式】桥接模式
桥接模式:把事物对象和其具体行为、具体特征分离开来,使它们可以各自独立的变化。事物对象仅是一个抽象的概念。如“圆形”、“三角形”归于抽象的“形状”之下,而“画圆”、“画三角”归于实现行为的“画图”类之下,然后由“形状”调用“画图”。“形状”成为一个继承体系,“画图”成为另一个继承体系,抽象和实现两者的关系为聚合关系。UML图如下:Abstraction:定义抽象的接口,该接口包原创 2014-08-08 09:02:24 · 1127 阅读 · 0 评论 -
【设计模式】命令模式
命令模式:将请求封装在对象中,客户不直接调用某个对象的方法,而是使用命令,将命令传递给拥有方法的对象从而让某一方法被调用。UML图如下:下面是用C++描写的命令模式的一个简单例子:#include #include #include using namespace std;// Interfaceclass Command {public: virtual原创 2014-08-09 10:18:04 · 1185 阅读 · 0 评论 -
【设计模式】模板方法模式
所谓模板方法模式,就是在在抽象基类中定义一套算法框架,框架内的步骤由各个派生类去实现。模板方法模式的好处在于,具有相同代码的操作提升至抽象基类中,派生类中只实现具有差异性的代码,从而最大程度减少了重复代码的存在。要注意的是,这里的模板方法和C++中的模板函数没有任何关系。下面以一个用C++描写的简单示例来说明模板方法模式的机制。#include #include using names原创 2014-07-15 09:40:16 · 1247 阅读 · 0 评论 -
【设计模式】策略模式
策略模式:指对象(被称为上下文)有某个行为,但是在不同的场景中,该行为有不同的实现算法。我们可以把算法单独提出来形成一个继承体系,然后让上下文包含某个算法即可。这样,当我们需要添加算法时,只需要继承某个抽象基类然后实现自己的算法即可,不需要修改其它已经实现的算法;当需要修改某个上下文所包含的算法时,也只需要修改上下文内指向算法的指针即可。下面这个例子是使用C++编写的一个带策略模式的计算器:原创 2014-07-14 09:30:30 · 1265 阅读 · 0 评论 -
【设计模式】适配器模式
适配器模式:将一个类的接口转换成客户希望的另一个接口,使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。UML图如下所示:从上图可以看出,Client需要一个名为methodA的接口,而类Adaptee只拥有一个名为methodB的接口。这时,就需要一个适配器来将接口做一个转换,使Client对methodA的调用能够转接到methodB。这个转接的任务就落在了适配器Adapt原创 2014-08-02 10:30:53 · 1194 阅读 · 0 评论 -
【设计模式】简单工厂模式
以面向对象的思想和简单工厂模式,写一个C++计算器程序,代码如下:#include using namespace std;class Operation {public: Operation(double left, double right) { lhs = left; rhs = right; } const doub原创 2014-07-13 13:05:52 · 1063 阅读 · 0 评论 -
【设计模式】外观模式
外观模式:它为子系统中的一组接口提供一个统一的高层接口,使得子系统更容易使用。这其实就是一个分层的思想,将较低层复杂的操作交由较高层同一管理,并向用户程序提供简单易用的接口。下面是一个用C++编写的外观模式的例子。#include #include using namespace std; // 键盘类class Keyboard {public: string Typ原创 2014-07-23 22:12:58 · 1130 阅读 · 0 评论