建造模式(Builder)--转载

 

设计模式学习笔记--建造模式(Builder)  建造(Builder)模式属于对象的创建模式。1. 定义 建造模式将一个产品的内部表象与产品生成过程分割出来,从而可以使一个建造过程生成具有不同的内部表象的产品对象。2. 使用的原因 是为了将构建复杂对象的过程和它的部件解耦。3.适用的情况 建造模式利用一个导演者对象和具体建造者对象一个一个地建造出所有的零件,从而建造出完整的产品对象。建造者模式将产品的结构和产品的零件建造过程对客户端隐藏起来,把对建造过程进行指挥的责任和具体建造零件和责任分割开来,达到责任划分和封装的目的。4. 类图结构及其说明 1)建造模式的类图如下所示: 2)各类的说明如下:i)抽象建造者(Builder)角色:给出一个抽象接口,以规范产品对象的各个组成成分的构造; ii)具体建造者(ConcretBuilder)角色:它在应用程序的调用下创建产品的实例。完成任务为; a) 实现抽象建造者Builder接口,给出一步步完成创建产品实例的操作; b) 在创建完成后,提供产品的实例。iii) 导演者(Director角色):调用具体建造者角色以创建产品对象; iv)产品(Product)角色:建造中的复杂对象。一般情况下,一个系统不止一个产品类。5. 应用举例以下实例建造一所Amigo想要的一所房子,呵呵,初中时的梦想:) 一所小小的竹子做成的房子,满屋挂满风铃,有一个茶几,坐落在山上。1) 需求分析Amigo的这所房子的建造跟我们讨论的建造模式很是相关哦,竹子、风铃、茶几相当于我们所说的“零件”,最后建造成的房子相当于Amigo梦寐以求的竹房。呵呵,我们开始建造吧,完成Amigo的梦想! i)我们首先建立一个接口Builder,它定义如何创建我想要的房子的各个组成部分:
publicinterfaceBuilder{//创建想要的竹子voidbuildBamboo();//创建风铃voidbuildWindbell();//创建茶几voidbuildTeapoy();//返回最后建造好的房子//房子的组装过程不在这里进行,而是转移到Director中进行,从而实现了解耦过程和部件HousegetHouse();} ii)Director类将竹子、风铃、茶几最后组装成我的full house
publicclassDirector{privateBuilderbuilder;publicDirector(Builderbuilder){this.builder=builder;}/***//***该方法组装我的fullhouse*/publicvoidconstruct(){builder.buildBamboo();builder.buildWindbell();builder.buildTeapoy();}} iii)具体建造器,茶几等怎么建造成的?我这样的懒人是不会知道的了,到时候请人吧。
publicclassConcreteBuilderimplementsBuilder{publicvoidbuildBamboo(){//让别人去做吧,我去数工钱了}publicvoidbuildWindbell(){//同上}publicvoidbuildTeapoy(){//同上}publicHousegetHouse(){}} iv)House类
publicclassHouse{} v) 下面来看看如何使用Builder模式来创建我的竹房,呵呵。
ConcreteBuilderbuilder=newConcreteBuilder();Directordirector=newDirector(builder);director.construct();Househouse=builder.getHouse();
:),建得差不多吧,还差点什么呢,以后慢慢想咯。参考书籍:《Java与模式》
实现一个建造模式,需要以下几个关键步骤:1、定义一个抽象建造类,其中定义获取目标产品的建造以及出口,如buildObject和getObject。2、定义一个或多个抽象建造类的实现类,顺带的定义了该实现类对应的实际产品种类等。3、定义一个指导类,用抽象建造类作为参数,来实际使用已有的实际建造类。

建造模式(Builder)有着与抽象工厂模式(Abstract Factory) 一样的优缺点,它一般是用来创建一个比较复杂的大对象,里面包含了多步部件拼装的过程,而最终输出的是一个完整的大对象。

如果说和抽象工厂(Abstract Factory) 的目标是输出许多同等的产品的话,那么建造模式(Builder)应该就是输出一个完整的大对象,里面涵盖了许多个同等的子部件。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值