Builder 模式

将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

 

当一个复杂对象的创建需要很多步骤的时候,这些步骤在不同的条件下是变化的.通过不同的Builder创建'不同风格'的复杂对象.

 

为什么不用类本身的constructor呢,构造函数应该只是对本身的数据(state&data)进行初始化.

 

 

Builder的buildPart可以在ConcreteBuilder被override,不同的ConcreteBuilder的buildPart不同,从而

得到不同的product.

 

 

 

客户端代码通过使用不同ConcreteBuilder,得到不同规格的产品.

Builder builder = new ConcreteBuilder();  //这个地方也可根据外部配置文件进行反射.
Director director = new Director( builder );        
Product product = builder.getResult();

 

Builder 和Factory有什么区别呢,我们包Builder简化,去掉Director,发现其和简单Factory就一样了.

为什么有了Factory还要有Builder呢,客户端无非都是得到想要的product啊?不理解......,目前的理解是:

 

Builder:分步骤的,构建出一个复杂对象,这个复杂对象有很多parts,在不同的场景中,part可能不同.

e.g. 一座房子,有屋顶,门,天花板,地板.

房子A的屋顶是欧式的斜顶,门是木门,天花板也是木的,地板也是木的.

房子B的屋顶是平顶的水泥板,门是防盗门,天花板是吊顶的,地板是木的.

它们的组成过程一样,每一个parts不同.

 

Simple Factory:构建简单对象,在不同的场景中,这个对象的实现可能不一样.

e.g. 保存数据的一个类,都有save方法.

类A的save方法把数据保存到DB.

类B的save方法把数据保存到File.

客户端通过factory得到一个这种类的对象,不关心是类A还是类B,调用save就行了.

 

Abstract Factory:构建系列对象,对象间有关联,不同的场景关联不同.

有一个factory,创建两个不同的task,task1和task2.

factoryA创建的task1要在task2之前完成.

factoryB创建的task1要在task2之后完成.

(parts不同,更关注这个对象的组成,实现不同,更关注这个对象的行为.)

 

其实,客户端本来就不关心你用的是Builder,Factory,Abstract Factory,只有你保证客户端代码不用改就行了.

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值