趁热打铁,继续第二篇文章,十一前多学多写。
原文地址: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:产品