C++设计模式的Builder模式生活中的体验

作者:  xuanner  发布日期: 2007-8-23 20:54:41   Email:chenxuan5627@163.com

---------------------------------------------------------------------------------------------------------------

(原创作品,转载请保留作者著作信息)

用处:Builder模式要解决的也正是这样的问题:当我们要创建的对象很复杂的时候(通常是由很多其他的对象组合而成),我们要要复杂对象的创建过程和这个对象的表示(展示)分离开来,这样做的好处就是通过一步步的进行复杂对象的构建,由于在每一步的构造过程中可以引入参数,使得经过相同的步骤创建最后得到的对象的展示不一样。 

生活中的Builder:Builder模式的创建,学校本来就是一个Builder的很好体验,学校就是一个复杂的对象,
 学校提供给新生注册的一些资料,比如Name、Age、Sex.....学生去注册就得到了这些资料,
 也即学生继承了这些属性,学校对某一个学生的注册有了记录,可以随时找到哪个学生的信息,
 这就是生活中Builder模式的体验。

代码实现:University.h、University.cpp、Registe.h、Registe.cpp、Student.h、Student.cpp、MainBuilder.cpp

 

// University.h
#ifndef UNIVERSITY_H_
#define  UNIVERSITY_H_ 100
class  Registe;
class  University
{
public:
    University(Registe 
*reg);
    
~University();
    
void getProp();
protected:
    
private:
    Registe 
*reg;
}
;
#endif

 

// University.cpp
#include  " University.h "
#include 
" Registe.h "
University::University(Registe 
* reg)
{
    
this->reg = reg;
}


void  University::getProp()
{
    reg
->getName();
    reg
->getAge();
    reg
->getSex();
}


University::
~ University()
{

}

 

// Registe.h及Student.h
#ifndef REGISTE_H_
#define  REGISTE_H_ 100
class  Registe
{
public:
    
virtual void getName()=0;
    
virtual void getAge()=0;
    
virtual void getSex()=0;
    Registe();
    
~Registe();
protected:
    
private:

}
;

class  Student :  public  Registe
{
public:
    Student();
    
~Student();
    
void getName();
    
void getAge();
    
void getSex();
}
;
#endif

 

// Registe.cpp及Student.cpp的实现
#include  " Registe.h "
#include 
< iostream >
using   namespace  std;
Registe::Registe()
{

}


Registe::
~ Registe()
{

}



/**  学生去注册,可以得到注册名、年龄、性别、
  *
  
*/

Student::Student()
{

}


Student::
~ Student()
{

}

void  Student::getAge()
{
    cout 
<< "the getAge() is invoked!!" << endl;
}


void  Student::getName()
{
    cout 
<< "the getName() is invoked!!" << endl;
}


void  Student::getSex()
{
    cout 
<< "the getSex() is invoked!!" << endl;
}

 

// MainBuilder.cpp
/*
    Builder模式的创建,学校本来就是一个Builder的很好体验,学校就是一个复杂的对象,
    学校提供给新生注册的一些资料,比如Name、Age、Sex.....学生去注册就得到了这些资料,
    也即学生继承了这些属性,学校对某一个学生的注册有了记录,可以随时找到哪个学生的信息,
    这就是生活中Builder模式的体验。

  
*/

#include 
" University.h "
#include 
" Registe.h "

int  main()
{
    University 
*university = new University(new Student());
    university
->getProp();
    
return 0;
}
Builder模式 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示 统设计,有时候面临着一个“复杂系统”的创建工作,该对象通常由各个部分的子对象用一定的算法构成,或者说按一定的步骤组合而成;这些的算法和步骤是稳定的,而构成这个对象的子对象却经常由于需求改变而发生变化,此时我们可以选择使用Builder模式。尽管Builder模式相当容易让人误解,但我认为这几点应该是不会有错的。因此我个人认为Builder模式要好好把握如下几点 1. 需要创建的对象是复杂对象 2. 对象的创建过程是一步步创建(即:可能由于过程的不同而导致有不同的对象展示) 3. 明确建造者(Builder)、具体建造者(Concrete Builder)、指导者(Director)、产品(Product)之间的职责和联系。 ◆建造者(Builder): 给出一个抽象接口,以规范产品对象的各个组成成分的建造。一般而言,此接口独立于应用程序的商业逻辑。模式直接创建产品对象的是 具体建造者(ConcreteBuilder):具体建造者类必须实现这个接口所要求的方法:一个是建造方法,另一个是结果返还方法。 ◆具体建造者(Concrete Builder): 担任这个角色的是于应用程序紧密相关的类,它们在应用程序调用下创建产品实例。这个角色主要完成的任务包括: ■实现Builder角色提供的接口,一步一步完成创建产品实例的过程。 ■在建造过程完成后,提供产品的实例。 ◆指导者(Director): 担任这个角色的类调用具体建造者角色以创建产品对象。导演者并没有产品类的具体知识,真正拥有产品类的具体知识的是具体建造者对象。 ◆产品(Product): 产品便是建造的复杂对象。 详细见博客 http://blog.csdn.net/xiaoting451292510/article/details/8330462
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值