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

6 篇文章 0 订阅
5 篇文章 0 订阅

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


原文地址: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:产品

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值