C++设计模式从0进击-4-建造者模式

建造者模式(Builder)

意图

建造者模式

将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

适用性

当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。

当构造过程必须允许被构造的对象有不同的表示时。

建造者模式(Builder)

MM最爱听的就是“我爱你”这句话了,见到不同地方的MM,要能够用她们的方言跟她说这句话哦,我有一个多种语言翻译机,上面每种语言都有一个按键,见到MM我只要按对应的键,它就能够用相应的语言说出“我爱你”这句话了,国外的MM也可以轻松搞定,这就是我的“我爱你 ”builder。(这一定比美军在伊拉克用的翻译机好卖)

建造者模式:将对象的内部表象和对象的生成过程分割开来,从而使一个建造过程生成具有不同的内部表象的产品对象。建造模式使得产品内部表象可以独立的变化,客户不必知道产品内部组成的细节。建造模式可以强制实行一种分步骤进行的建造过程。

class Person
{
public:
	virtual void CreateHead() = 0;
	virtual void CreateHand() = 0;
	virtual void CreateBody() = 0;
	virtual void CreateFoot() = 0;
};

class ThinPerson: public Person
{
public:
	virtual void CreateHead()
	{
		cout << "Create Thin Head" << endl;
	}

	virtual void CreateHand()
	{
		cout << "Create Thin Hand" << endl;
	}

	virtual void CreateBody()
	{
		cout << "Create Thin Body" << endl;
	}

	virtual void CreateFoot()
	{
		cout << "Create Thin Foot" << endl;
	}
};

class ThickPerson: public Person
{
public:
	virtual void CreateHead()
	{
		cout << "Create Thick Head" << endl;
	}

	virtual void CreateHand()
	{
		cout << "Create Thick Hand" << endl;
	}

	virtual void CreateBody()
	{
		cout << "Create Thick Body" << endl;
	}

	virtual void CreateFoot()
	{
		cout << "Create Thick Foot" << endl;
	}
};

//指挥者类
class Direct
{
private:
	Person * p;
public:
	Direct(Person * temp){p = temp;}
	void Create()
	{
		p->CreateHead();
		p->CreateHand();
		p->CreateBody();
		p->CreateFoot();
	}
};

int _tmain(int argc, char argv[])
{
	Person * p = new ThickPerson();
	Direct * d = new Direct(p);
	d->Create();
	delete p;
	delete d;
	return 0;
}
时间: 2024-10-10 00:22:50

C++设计模式从0进击-4-建造者模式的相关文章

C++设计模式从0进击-3-工厂模式

Factory Method(工厂模式):定义一个用于创建对象的接口,让子类决定将哪一个类实例化.Factory Method使一个类的实例化延迟到其子类. 工厂模式(Factory) 请MM去麦当劳吃汉堡,不同的MM有不同的口味,要每个都记住是一件烦人的事情,我一般采用Factory Method模式,带着MM到服务员那儿,说"要一个汉堡",具体要什么样的汉堡呢,让MM直接跟服务员说就行了. 工厂方法模式:核心工厂类不再负责所有产品的创建,而是将具体创建的工作交给子类去做,成为一个抽

C++设计模式从0进击-5-单例模式

单例模式(Singleton) 意图 单例模式 保证一个类仅有一个实例,并提供一个访问它的全局访问点. 适用性 当类只能有一个实例而且客户可以从一个众所周知的访问点访问它时. 当这个唯一实例应该是通过子类化可扩展的,并且客户应该无需更改代码就能使用一个扩展的实例时. 单例模式(Singleton) 俺有6个漂亮的老婆,她们的老公都是我,我就是我们家里的老公Sigleton,她们只要说道"老公",都是指的同一个人,那就是我(刚才做了个梦啦,哪有这么好的事) 单例模式:单例模式确保某一个类

设计模式之第11章-建造者模式(Java实现)

设计模式之第11章-建造者模式(Java实现) “那个餐厅我也是醉了...”“怎么了?”“上菜顺序啊,竟然先上甜品,然后是冷饮,再然后才是菜什么的,无语死了.”“这个顺序也有人这么点的啊.不过很少就是了,正常来说如果是中餐的话,都是先凉菜再热菜,然后是汤,最后是一些甜品什么的.西餐呐,先有头盘,用来开胃的,然后是汤(感觉好怪的说),再然后是副菜.主菜.蔬菜类.甜品.饮料来着.然后法国嘛就是blablabla...”(作者已被众人拖走.“让我说完啊,就剩几个国家了~啊~~”).咳咳,题归正转.你问

设计模式总结篇系列:建造者模式(Builder)

关于建造者模式网上有很多文章,也有些不同的理解.在此结合网上其他文章对建造者模式进行总结. 总体说来,建造者模式适合于一个具有较多的零件(属性)的产品(对象)的创建过程.根据产品创建过程中零件的构造是否具有一致的先后顺序,可以将其分为如下两种形式. 一.通过Client.Director.Builder和Product形成的建造者模式 Builder负责Product类对象的具体过程构建,Director负责指导Build,要求Builder按照其指定的顺序去完成Produt的构造.最后通过Bu

java设计模式(二)单例模式 建造者模式

(三)单例模式 单例模式应该是最常见的设计模式,作用是保证在JVM中,该对象只有一个实例存在. 优点:1.减少某些创建比较频繁的或者比较大型的对象的系统开销. 2.省去了new操作符,降低系统内存使用频率,减轻GC压力. 3.保证核心代码的唯一性,比如交易引擎. 单例模式看似是最简单的设计模式. public class Singleton { //私有构造方法,防止实例化 private Singleton(){ } //创建类的实例的时候加载 private static Factory f

Java设计模式菜鸟系列(十五)建造者模式建模与实现

转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/39856435 建造者模式(Builder):工厂类模式提供的是创建单个类的模式,而建造者模式则是将各种产品集中起来进行管理.简单起见,就拿之前的工厂方法模式进行修改一下就可以得到建造者模式. 一.uml建模: 二.代码实现 /** * 示例:建造者模式 * * 与工厂模式的区别:工厂类模式提供的是创建单个类,而建造者模式则是将各种产品集中起来进行管理 */ interface Sende

设计模式C++实现九:建造者模式

建造者模式(Builder):主要用于创建一些复杂的对象,这些对象内部构建间的建造顺序通常是稳定的,但对象内部的构建通常面临着复杂的变化.其好处就是使得建造代码与表示代码分离,由于建造者隐藏了该产品是如何组装的,所以需要改变一个产品的内部表示,只需要再定义一个具体的建造者就可以了.建造者模式是在当创建复杂对象的算法应该独立于该对象的组成部分以及他们的装配方式时使用的模式. #ifndef BUILDER_H #define BULDER_H #include<iostream> //#incl

设计模式(5):建造者模式

建造者模式: 定义: 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 类图: 4个角色: 1.Product产品类 通常是实现了模板方法模式. 2.Builder抽象建造者 规范产品的组建,一般是由子类实现. 3.ConcreateBuilder 实现抽象类定义的所有方法,并且返回一个组件好的对象. 4.Director导演类 负责安排已有模块的顺序,然后告诉Builder开始建造. //产品类 class Product { public void doSometh

.NET设计模式(4):建造者模式(Builder Pattern)(转)

概述 在软件系统中,有时候面临着“一个复杂对象”的创建工作,其通常由各个部分的子对象用一定的算法构成:由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的算法确相对稳定.如何应对这种变化?如何提供一种“封装机制”来隔离出“复杂对象的各个部分”的变化,从而保持系统中的“稳定构建算法”不随着需求改变而改变?这就是要说的建造者模式. 本文通过现实生活中的买KFC的例子,用图解的方式来诠释建造者模式. 意图 将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表