设计模式是人们从长期的软件开发实战中总结出来的一些经验之谈,为软件领域中的开发人员提供了一种使用专家设计经验的有效途径,通常是多个设计模式结合使用。设计模式中运用了面向对象编程语言的重要特性:封装、继承、多态,只有通过大量的编程实践才能真正领悟设计模式的精髓。在参加校招前我翻看了部分设计模式相关的书,对于每个设计模式模式,用C++写了个小例子,加深一下理解。主要参考《大话设计模式》和《设计模式》两本书以及借鉴其他博客园博文的优秀部分。本文介绍观察者模式的实现。希望对大家加深对设计模式的理解有一点帮助。
一、 概述
Builder 模式要解决的问题是:当我们要创建的对象很复杂的时候(通常是由很多其他的对象组合而成),我们要要复杂对象的创建过程和这个对象的表示(展示)分离开来,这样做的好处就是通过一步步的进行复杂对象的构建,由于在每一步的构造过程中可以引入参数,使得经过相同的步骤创建最后得到的对象的展示不一样。
二、举例
KFC 与 Mcdonalds 的汉堡生成过程大致都是一样的,假设分为4个步骤;
但是 KFC 与 Mcdonalds的汉堡味道有所差别,主要是在每一步的细节上有所不同。
顾客要吃汉堡并不关心具体的生产步骤,其实汉堡店也不关心,因为数百年来,这些步骤者是相同的,差别只在细节上。比如盐放多少,辣椒放多少等等。
结构如下:
Builder:为最基本的生产步骤
KFCBuilder:为KFC的具体生产步骤
MCDBuilder:为Mcdonalds的具体生产步骤
Director:为指挥者,用它来控件建造过程
#include
#include
usingnamespacestd;
//建造者
classBuilder
{
public:
virtual~Builder()
{
}
virtualvoidBuildSetp1()=0;
virtualvoidBuildSetp2()=0;
virtualvoidBuildSetp3()=0;
virtualvoidBuildSetp4()=0;
};
//KFC具体建造者
classKFCBuilder:publicBuilder
{
public:
voidBuildSetp1()
{
cout<<"KFCStep1:"<
BuildSetp1();
m_pBuilder->BuildSetp2();
m_pBuilder->BuildSetp3();
m_pBuilder->BuildSetp4();
}
};
//
//测试代码
intmain(intargc,char*argv[])
{
KFCBuilderkfc;//想吃KFC
Directordirector(&kfc);
director.Create();
return0;
}
三. 说明
1. 建造者模式,在建造顺序上通常是稳定的。
2. 指挥者(Director),来隔离用户与具体建造过程的关联。
3. 它的好处是,客户端不需要知道具体的建造者方法,也不用但心忘记某一步骤没写,这些步骤统一由Director来调用。
好啦,关于建造者模式就介绍到这里了,希望你已经掌握了这个模式并且可以熟练的使用它,那么本博文的效果就达到了。如果你还觉得意犹未尽,那么可以去看看博主的其他设计模式的介绍哦。
关于设计模式,我推荐大家看看以下博客写的博文,关于设计模式的讲解将的特别好,我从中学习了很多,我的设计模式中的部分博文就是从这里借鉴过来的。
博客链接:http://blog.csdn.net/wuzhekai1985