
设计模式
文章平均质量分 84
csxcoder
To be or not to be !
展开
-
Command 模式
Command 模式通过将请求封装到一个对象(Command)中,并将请求的接受者存放具体的 ConcreteCommand 类中(Receiver)中,从而实现调用操作的对象和操作的具体实现者之间的解耦。Command 模式结构图中,将请求的接收者(处理者)放到 Command 的具体子类ConcreteCommand 中,当请求到来时(Invoker 发出 Invoke 消息激活原创 2015-03-23 10:05:55 · 233 阅读 · 0 评论 -
Bridge 模式
Bridge 模式将抽象和行为划分开来,各自独立,但能动态的结合。在面向对象设计的基本概念中,对象这个概念实际是由属性和行为两个部分组成的,属性我们可以认为是一种静止的,是一种抽象,一般情况下,行为是包含在一个对象中,但是,在有的情况下,我们需要将这些行为也进行归类,形成一个总的行为接口,这就是桥模式的用处。 1 ///////////////Abstraction.h////////原创 2015-03-23 10:03:22 · 352 阅读 · 0 评论 -
Adapter 模式
在实际软件系统设计和开发中,会经常遇到这种问题:我们为了完成某项工作购买了一个第三方的库来加快开发。 这就带来了一个问题: 我们在应用程序中已经设计好了接口,与这个第三方提供的接口不一致,为了使得这些接口不兼容的类可以在一起工作,Adapter 模式提供了将一个类(第三方库)的接口转化为客户(购买使用者)希望的接口。 1 //////////////Adapter.h/////////原创 2015-03-23 10:03:29 · 309 阅读 · 0 评论 -
Factory 模式
1 ////////////Factory.h//////////////////////// 2 #ifndef _FACTORY_H_ 3 #define _FACTORY_H_ 4 5 class Product ; 6 7 class Factory 8 { 9 public:10 virtual ~Factory() = 0 ;11原创 2015-03-23 10:02:36 · 277 阅读 · 0 评论 -
AbstractFactory 模式
1 ///////////////////////Product.h////////////// 2 #ifndef _PRODUCT_H_ 3 #define _PRODUCT_H_ 4 class AbstractProductA 5 { 6 public: 7 virtual ~AbstractProductA(); 8 protected: 9原创 2015-03-23 10:02:39 · 253 阅读 · 0 评论 -
Singleton 模式
个人认为 Singleton 模式是设计模式中最为简单、最为常见、最容易实现,也是最应该熟悉和掌握的模式。且不说公司企业在招聘的时候为了考察员工对设计的了解和把握,考的最多的就是 Singleton 模式。 1 ///////Singleton.h///////////////////// 2 #ifndef _SINGLETON_H_ 3 #define _SINGLETON原创 2015-03-23 10:02:52 · 347 阅读 · 0 评论 -
Prototype 模式
Prototype 模式提供了一个通过已存在对象进行新对象创建的接口(Clone) ,Clone()实现和具体的实现语言相关,在 C++中我们将通过拷贝构造函数实现之。////////////////Prototype.h///////#ifndef _PROTOTYPE_H_#define _PROTOTYPE_H_class Prototype{public:原创 2015-03-23 10:03:06 · 400 阅读 · 0 评论 -
Composite 模式的实现
实现要点:1.组合模式采用树形结构来实现普遍存在的对象容器,从而将“一对多”的关系转化“一对一”的关系,使得客户代码可以一致地处理对象和对象容器,无需关心处理的是单个的对象,还是组合的对象容器。2.将“客户代码与复杂的对象容器结构”解耦是组合模式的核心思想,解耦之后,客户代码将与纯粹的抽象接口——而非对象容器的复内部实现结构——发生依赖关系,从而更能“应对变化”。3.组合模式中,是将“原创 2015-03-23 10:03:46 · 384 阅读 · 0 评论 -
Flyweight 模式
如果一个应用程序使用了太多的对象, 就会造成很大的存储开销。 特别是对于大量轻量级 (细粒度)的对象,比如在文档编辑器的设计过程中,我们如果为每个字母创建一个对象的话,系统可能会因为大量的对象而造成存储开销的浪费。例如一个字母“a”在文档中出现了100000 次,而实际上我们可以让这一万个字母“a”共享一个对象,当然因为在不同的位置可能字母“a”有不同的显示效果(例如字体和大小等设置不同) ,在这原创 2015-03-23 10:04:09 · 342 阅读 · 0 评论 -
Facade 模式
在软件系统开发中经常回会遇到这样的情况,你实现了一些接口(模块),而这些接口(模块)都分布在几个类中(比如 A和 B、C、D) :A中实现了一些接口,B 中实现一些接口(或者 A代表一个独立模块,B、C、D代表另一些独立模块) 。然后你的客户程序员 (使用你设计的开发人员) 只有很少的要知道你的不同接口到底是在那个类中实现的,绝大多数只是想简单的组合你的 A-D的类的接口,他并不想知道这些接口在哪原创 2015-03-23 10:04:23 · 282 阅读 · 0 评论 -
Proxy 模式
在以下集中情况下可以用 Proxy模式解决问题: 1)创建开销大的对象时候,比如显示一幅大的图片,我们将这个创建的过程交给代理去完成,GoF 称之为虚代理(Virtual Proxy);2)为网络上的对象创建一个局部的本地代理,比如要操作一个网络上的一个对象(网络性能不好的时候,问题尤其突出) ,我们将这个操纵的过程交给一个代理去完成,GoF 称之为远程代理(Remote Proxy);原创 2015-03-23 10:04:27 · 301 阅读 · 0 评论 -
Template 模式
Template 模式是很简单模式,但是也应用很广的模式。Template 是采用继承的方式实现算法的异构,其关键点就是将通用算法封装在抽象基类中,并将不同的算法细节放到子类中实现。Template 模式获得一种反向控制结构效果, 这也是面向对象系统的分析和设计中一个原则 DIP(依赖倒置:Dependency Inversion Principles) 。其含义就是父类调用子类的操作(高层模块调原创 2015-03-23 10:04:40 · 222 阅读 · 0 评论 -
Strategy 模式
可以看到 Strategy 模式和 Template 模式解决了类似的问题,也正如在 Template 模式中分析的,Strategy模式和 Template 模式实际是实现一个抽象接口的两种方式:继承和组合之间的区别。要实现一个抽象接口,继承是一种方式:我们将抽象接口声明在基类中,将具体的实现放在具体子类中。组合(委托)是另外一种方式:我们将接口的实现放在被组合对象中,将抽象接口放在组合类中。这原创 2015-03-23 10:05:11 · 276 阅读 · 0 评论 -
State 模式
State模式中我们将状态逻辑和动作实现进行分离。允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类;在一个状态即将结束的时候启用下一个状态。 1 /////////state.h///////////////////////////////////////////////////////////////// 2 #pragma once 3 cl原创 2015-03-23 10:05:15 · 303 阅读 · 0 评论 -
Memento 模式
Memento 模式的关键就是要在不破坏封装行的前提下,捕获并保存一个类的内部状态,这样就可以利用该保存的状态实施恢复操作。 1 /////////Originator.h////////////////////////////////////////// 2 #pragma once 3 #include string> 4 using namespace std;原创 2015-03-23 10:05:41 · 239 阅读 · 0 评论 -
Mediator 模式
在面向对象系统的设计和开发过程中,对象之间的交互和通信是最为常见的情况,因为对象间的交互本身就是一种通信。在系统比较小的时候,可能对象间的通信不是很多、对象也比较少,我们可以直接硬编码到各个对象的方法中。但是当系统规模变大,对象的量变引起系统复杂度的急剧增加,对象间的通信也变得越来越复杂,这时候我们就要提供一个专门处理对象间交互和通信的类,这个中介者就是 Mediator 模式 1 /原创 2015-03-23 10:05:50 · 357 阅读 · 0 评论 -
Builder 模式
Builder 模式和 AbstractFactory 模式在功能上很相似,因为都是用来创建大的复杂的对象,它们的区别是:Builder 模式强调的是一步步创建对象,并通过相同的创建过程可以获得不同的结果对象,一般来说 Builder 模式中对象不是直接返回的。而在 AbstractFactory 模式中对象是直接返回的,AbstractFactory模式强调的是为创建多个相互依赖的对象提供一个同原创 2015-03-23 10:03:01 · 227 阅读 · 0 评论