建造者模式


一: 概述
 
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
通俗点说:
 
二  演化过程
方法1: 要保证一个类仅由一个实例,可以在调用处判断类对象是否为空, 如果空就创建对象,否则就不创建。
 
三: 模式解读
1 类图
 
2 要点

参与者:
  1. Builder  为创建一个Product对象的各个部件提供抽象接口
  2. ConcreteBuilder
    实现Builder提供的接口
  3. Director  构造一个使用Builder接口的对象
  4. Product 表示被构造的复杂对象

3 模式代码实现
#include <iostream>
using namespace std; 
//Builder 定义创建Product对象各组件的接口 
class PersonBuilder
{
public:
    //PersonBuilder(); //不注释掉,无法运行 
    virtual void DrawHead()=0;
    virtual void DrawBody()=0;
    virtual void DrawArm()=0;
    virtual void DrawLeg()=0;   
};
//ConcreteBuilder实现接口 
class PersonThinBuilder:public PersonBuilder
{
public:
    void DrawHead(){ cout <<"画瘦人头"<<endl; }
    void DrawBody(){cout <<"画瘦人身体"<<endl; }
    void DrawArm(){cout <<"画瘦人胳膊"<<endl; }
    void DrawLeg(){cout <<"画瘦人腿"<<endl; }       
};
//Director使用Builder对象来创建Product 
class PersonDirector
{
private:
    PersonBuilder *pb;
public:
    PersonDirector(PersonBuilder *person)
    {
        this->pb = person;
    }
    void CreatePerson()
    {
        pb->DrawHead();
        pb->DrawBody();
        pb->DrawArm();
        pb->DrawLeg(); 
    }   
};

int main()
{
    PersonBuilder *pb = new PersonThinBuilder();
    PersonDirector *pd = new PersonDirector(pb);
    pd->CreatePerson();
}
四: 模式总结
 优点
 缺点
应用实例
重构中的应用
 相关模式 (区别联系)
 
                                                                                                  
posted @ 2013-11-12 15:11  tanhaiyuan  阅读(123)  评论(0编辑  收藏  举报