Builder模式是一步一步创建一个复杂的对象,因为一个复杂的对象,不但有很多大量组成部分,如汽车,有很多部件:车轮 方向盘 发动机还有各种小零件等等,部件很多,但远不止这些,如何将这些部件装配成一辆汽车,这个装配过程也很复杂(需要很好的组装技术),Builder模式就是为了将部件和组装过程分开.
1). 定义
建造模式将一个产品的内部表象与产品生成过程分割出来,从而可以使一个建造过程生成具有不同的内部表象的产品对象。
2). 使用的原因
是为了将构建复杂对象的过程和它的部件解耦。
3). 适用的情况
建造模式利用一个导演者对象和具体建造者对象一个一个地建造出所有的零件,从而建造出完整的产品对象。
建造者模式将产品的结构和产品的零件建造过程对客户端隐藏起来,把对建造过程进行指挥的责任和具体建造零件和责任分割开来,达到责任划分和封装的目的。
其中的类或对象之间的关系为:
Builder:抽象建造者
为创建一个Product对象的各个部件指定抽象接口。
ConcreteBuilder:具体建造者
1.实现Builder接口,构造和装配产品的各个部件.
2.定义并明确它所创建的表示.
3.提供一个返回这个产品的接口。
Director:指挥者
构建一个使用Builder接口的对象。
调用具体建造者角色以创建产品对象;
Product:产品角色
1.被构建的复杂对象,具体建造者创建该产品的内部表示并表示定义它的装配过程。
2.包含定义组成部件的类,包括将这些部件装配成最终产品的接口。
为什么需要Director:
在这个模式中,Director类好像是一个多余的类,在应用中的作用好像并不大。其实它的作用是明显的。第一,它隔离了客户及生产过程。第二,它负责控制产品的生成过程。比如你是客户,你要买汽车,你选好车型、颜色、内外装饰等,交给Director,Director告诉你去某车间取车就可以。这样其作用大家都能体会出来了吧。
Builder模式与AbstractFactory模式的区别:
建造者模式(Builder)与抽象工厂模式很相象,但是,Builder返回完整的一个产品,而AbstractFactory返回一系列有关系的产品;在抽象工厂模式中,客户采用AbstractFactory生成自己要用的对象,而在建造者模式中,客户指导Builder类如何生成对象,或者如何合成一些类来构成建造类,侧重于一步步构造一个复杂对象,然后将结果返回。
参考:http://blog.csdn.net/joyney/archive/2009/03/18/4000741.aspx
http://www.blogjava.net/amigoxie/archive/2007/03/18/104610.html
http://www.jdon.com/designpatterns/builder.htm
http://blog.csdn.net/zhengzhb/article/details/7375966
抽象建造者:
public interface Builder { protected Product pro = new Product(); void buildPartA(); //创建部件A 比如创建汽车车轮 void buildPartB(); //创建部件B 比如创建汽车方向盘 void buildPartC(); //创建部件C 比如创建汽车发动机 Product getResult(){ return pro; }; //返回最后组装成品结果 (返回最后装配好的汽车) //成品的组装过程不在这里进行,而是转移到下面的Director类中进行. //从而实现了解耦过程和部件 }
具体建造者:
public class ConcreteBuilder implements Builder { Part partA, partB, partC; public void buildPartA() { pro.setXX()... //此处装配Product }; public void buildPartB() { //这里是具体如何构建partB的代码 }; public void buildPartC() { //这里是具体如何构建partB的代码 }; }
指导者:
public class Director { private Builder builder; public Director( Builder builder ) { this.builder = builder; } // 将部件partA partB partC最后组成复杂对象 //这里是将车轮 方向盘和发动机组装成汽车的过程 public void construct() { builder.buildPartA(); builder.buildPartB(); builder.buildPartC(); } }
使用:
ConcreteBuilder builder = new ConcreteBuilder(); Director director = new Director( builder ); director.construct(); Product product = builder.getResult();
省略指导者:
参考:http://blog.csdn.net/joyney/article/details/4000741
http://www.jdon.com/designpatterns/builder.htm
相关推荐
NULL 博文链接:https://wy649898543.iteye.com/blog/1431751
C#设计模式之建造者(Builder)模式示例源代码
明确建造者(Builder)、具体建造者(Concrete Builder)、指导者(Director)、产品(Product)之间的职责和联系。 ◆建造者(Builder): 给出一个抽象接口,以规范产品对象的各个组成成分的建造。一般而言,...
设计模式C++学习之建造者模式(Builder)
建造者又分两种,一种是有一个专门的类负责决定建造的顺序,如上例,有人可以决定建筑商先建什么,后建什么。代码如下(原谅我用拼音,这么做是不对的):房子类:园林类:
Java 设计模式-建造者模式(Builder)结合Android小知识讲解,简单明了
将一个复杂对象的构造与它的表示分离,使同样的构建 过程可以创建不同的表示,这样的设计模式被称为建造者模式。
java设计模式【之】建造者模式【源码】【场景:车辆组装】 将复杂的对象构建,与对象的使用进行分离 用户只需要通过简单流程即可创建出对象 方法调用顺序,步骤的不同实现 优点:封装性号,创建和使用分离,扩展性...
主要介绍了Java设计模式之建造者模式(Builder模式)介绍,本文讲解了为何使用建造者模式、如何使用建造者模式、Builder模式的应用等内容,需要的朋友可以参考下
主要介绍了C++设计模式之建造者模式Builder的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
NULL 博文链接:https://jacky-dai.iteye.com/blog/2295399
主要介绍了PHP设计模式之建造者模式(Builder)原理与用法,结合具体实例形式详细Fenix了建造者模式的概念、原理、用法及操作注意事项,需要的朋友可以参考下
demo中使用了设计模式中的建造者模式,代码非常精简,本地可正常运行,亲测有效!
建造者模式是一种创建型设计模式,用于简化复杂对象的创建过程。以下是建造者模式的关键概念和步骤: 1. **分离复杂对象的构建和表示**:建造者模式将一个复杂对象的构建过程与其最终的表示形式分离开来。这样做的...
本文实例讲述了Python设计模式之建造者模式。分享给大家供大家参考,具体如下: 建造者模式(Builder Pattern):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示 下面是一个建造者模式的...
主要介绍了Ruby设计模式编程中使用Builder建造者模式的实例,建造者模式将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,需要的朋友可以参考下
php /** * 建造者模式 * * 将一个复杂对象的构建与它的表示分离,使用同样的构建过程可以创建不同的表示 */ class Product { public $_type = null; public $_size = null; public $_color = null; public function ...
主要为大家详细介绍了Java设计模式之Builder建造者模式的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下