现在的位置: 首页 > 综合 > 正文

《每日编程》—-《设计模式》—-《二》—-builder模式

2013年05月30日 ⁄ 综合 ⁄ 共 911字 ⁄ 字号 评论关闭

趁热打铁,继续第二篇文章,十一前多学多写。


原文地址:http://blog.csdn.net/lengzijian/article/details/8025091


首先看书上说的,将一个复杂对象的结构与它表示分离,是同样的构建过程可以构建不同的表示

原以为就是一个非常复杂的,有多个部分组成,单独把每个部分提取出来创建,再通过继承的方式创建不同的复杂对象


后来发现自己进入了一个误区,首先应该肯定的是Builder是创建型的模式,主要用于创建一个复杂的对象。至于有人说把Builder当做创建型会让人进入误区,多数是理论派的代表。


先来看下Builder 模式结构图


(图来源于书上)

多继承是一种实现方式,并非最优化的方式。

可以通过继承BuildPartA、BuildPartB、BuildPartC的方式来创建不同的复杂对象

缺点是:每当有新类型产生是,需要添加代码,即每个对象都有自己的BuildPartA。。。

单继承多实现:通过添加变量的方式实现不同对象创建,有如下两种方式:

1.在GetProduct中添加变量:

void ConcreteBuilder::GetProduct(string type) 
{ 
    switch(type)
    {
        case "A":
            BuildPartA(); 
            break
            
        case "BC":
            BuildPartB(); 
            BuildPartC(); 
    }
}


2.在BuildPart中添加变量:

void ConcreteBuilder::BuildPartA(const string&buildPara) 
{ 
    cout<<"Step1:Build PartA..."<<buildPara<<endl;     
} 


或者两种都用,这样就可以解决不停创建子类的麻烦,由于在每一部构造过程中,可以引入参数,是的经过相同步骤创建最后得到的对象的展示不一样。


下面附上可运行源码,linux下make即可:

https://github.com/lengzijian/Builder


代码结构:

Builder:创建Product对象的所需各部分的抽象接口

ConcreteBuilder:负责chaung见的具体接口

Director:负责发出创建命令

Product:产品

抱歉!评论已关闭.