java设计模式之-建造者模式

建造者模式能够将复杂的构建与其表示相分离,是的同样的构建过程可以创建出不同的表示。

建造者模式与抽象工厂的区别是:在建造者模式里,有个指导者,这个指导者来管理建造者,用户与指导者相互联系,指导者联系建造者,最终得到我们需要的产品。即建造者模式可以强制实行一种分步骤进行的建造过程。

建造者模式是将复杂的的内部创建封装在内部,对于外部调用的人员来说,只要传入指导者和建造者就可以了,具体内部怎样建造成为产品,用户不用知道,不同的产品需要定义不同的建造者。

概念:

1.抽象建造者(builder):此类一般为抽象类或者是接口,它负责描述产品的建造过程(一步或者若干部),同时提供返回最终产品的方法,例如这个类叫CarBuilder(void makeHead(建造车头的接口),void makeBody(建造车身的接口),void makeFoot(建造车尾的接口), Car getCar(返回一辆车)),其中三个void方法,是这辆车的组装顺序,getCar是返回最终的产品。

2.具体建造者(ImplBuilder or extendsBuilder):此类为实现或者继承了第一步所写的接口或者抽象类,可以存在有多个,比如JeepBuilder(吉普车的建造),AodiBuilder(奥迪车的建造),实现getCar()的时候,返回产品的实例一样,实例属性不同

3.产品实例(Car):指被构建的对象,对象内有多个属性,或者多条构建步骤

4.指挥者(Director):指挥者又称为导演者,他负责安排对复杂对象的建造过程,指挥者与抽象建造者之间存在关联关系,指挥者中的方法(createCar())调用抽象建造者的实现类的建造步骤,完成对复杂对象的建造功能。客户端一般只需要实例化一个指挥者,然后实例化一个建造者(jeep车的具体建造或者aodi车的具体建造),然后通过指挥者的构造函数或者setter方法传入建造者,在指挥者的指挥类中调用建造过程。

建造模式的优点:

1.封装性

使用建造者模式时,可以使客户端不必知道产品的内部组成的细节,如上面的例子,最后都返回car对象,传入不同的建造者,就返回不        同的car对象,客户端不用知道内部的装配步骤

2.建造者独立,容易扩展

易扩展体现在不同的建造者的构建,只要建造者的调用的步骤方法一样,就可以通过继承抽象类或者实现接口,来返回不同的建造者,有利于系统的扩展

3.便于控制细节风险

因为具体的建造者是独立的,因此可以对建造对象进行定制diy或者细化等等操作,而不用担心会对其他模块产生任何影响

建造者模式的使用场景:

1.相同的方法,不同的执行顺序,产生不同的事件结果时,可以采用建造者模式

2.多个步骤或者零件,都可以装配到一个对象中,但产生的对象内容是不一样的这时候就可以使用此模式

3.产品类比较复杂,或者调用不同的顺序会产生不同的结构的时候,可以使用建造者模式

4.在对象的创建过程中会用到系统中的其他对象,这些对象在产品对象的创建工程中是不容易得到的,也可以使用此模式风窗该对象的创建过程。不推荐此种方法,此方法只是一种补偿方法,因为一个对象不容易得到,在设计的时候已经违背了最初的设目标

建造者模式关注的零件类型和装配的顺序,这是他与工厂模式最大不同的地方,虽然同为创建类模式,但是重点确是不同的。

时间: 2024-08-08 09:30:28

java设计模式之-建造者模式的相关文章

java设计模式之建造者模式

本文继续介绍23种设计模式系列之建造者模式. 定义: 建造者模式:将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 实用范围 1.当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时. 2.当构造过程必须允许被构造的对象有不同表示时. 角色 在这样的设计模式中,有以下几个角色: 1.Builder:为创建一个产品对象的各个部件指定抽象接口. 2.ConcreteBuilder:实现Builder的接口以构造和装配该产品的各个部件,定义并明确它所创建的表示

java设计模式_建造者模式

/**  *   */ package com.wangbiao.design.builder; import java.util.ArrayList; import java.util.Iterator; import java.util.List; /**  * @Title: Product.java  * @Package com.wangbiao.design.builder  * @Description: TODO   * @author wangbiao     * @date 

java设计模式之四建造者模式(Builder)

工厂类模式提供的是创建单个类的模式,而建造者模式则是将各种产品集中起来进行管理,用来创建复合对象,所谓复合对象就是指某个类具有不同的属性,其实建造者模式就是前面抽象工厂模式和最后的Test结合起来得到的.我们看一下代码: 还和前面一样,一个Sender接口,两个实现类MailSender和SmsSender.最后,建造者类如下: [java] view plaincopy public class Builder { private List<Sender> list = new ArrayL

【java】java 设计模式(4):建造者模式(Builder)

工厂类模式提供的是创建单个类的模式,而建造者模式则是将各种产品集中起来进行管理,用来创建复合对象,所谓复合对象就是指某个类具有不同的属性,其实建造者模式就是前面抽象工厂模式和最后的Test结合起来得到的.我们看一下代码: 还和前面一样,一个Sender接口,两个实现类MailSender和SmsSender.最后,建造者类如下: public class Builder { private List<Sender> list = new ArrayList<Sender>(); p

大话设计模式_建造者模式(Java代码)

建造者模式:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示 简单描述:1个产品类(可有可无,关键是建造流程),1个抽象建造步骤类,多个具体建造子类(不同的类建造不同的产品),1个指挥者(用于规定建造流程),客户端指定需要建造的具体类型,由指挥者建造好之后,建造者子类返回对应产品给客户 大话设计模式中的截图: 例子代码: Product类: 1 package com.longsheng.builder; 2 3 public class Product { 4 5 pr

设计模式之建造者模式简明示例

建造者模式将一个复杂对象的创建和它的表示分离,使用同样的创建过程可以创建不同的表示 应用实例 在Java中,建造者模式是一种常见的设计模式,StringBuilder以及okhttp3.Request都应用了建造者模式: OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder() .url("http://www.baidu.com") .build(); 实现 我们将要实现一个Hu

JAVA设计模式之代理模式

学编程吧JAVA设计模式之代理模式发布了,欢迎通过xuebiancheng8.com来访问 一.概述 给某一个对象提供一个代理,并由代理对象来完成对原对象的访问.代理模式是一种对象结构型模式. 二.适用场景 当无法直接访问某个对象或访问某个对象存在困难时可以通过一个代理对象来间接访问,为了保证客户端使用的透明性,委托对象与代理对象需要实现相同的接口. 三.UML类图 四.参与者 1.接口类:Subject 它声明了真实访问者和代理访问者的共同接口,客户端通常需要针对接口角色进行编程. 2.代理类

C++设计模式之建造者模式(二)

3.省略指挥者Director的建造者模式 指挥者类Director在建造者模式中扮演非常重要的作用,简单的Director类用于指导具体建造者如何构建产品,它按一定次序调用Builder的buildPartX()方法,控制调用的先后次序,并向客户端返回一个完整的产品对象.Direcotr针对抽象的建造者进行编程,如果需要不同的建造者,只需把建造者传入指挥者类,无需修改之前的代码. 在有些情况下,为了简化系统结构,可以省略指挥者Director,指挥者不再指导产品的创建过程.而是在Builder

浅析JAVA设计模式之工厂模式(一)

1 工厂模式简介 工厂模式的定义:简单地说,用来实例化对象,代替new操作. 工厂模式专门负责将大量有共同接口的类实例化.工作模式可以动态决定将哪一个类实例化,不用先知道每次要实例化哪一个类. 工厂模式可以分一下三种形态: 简单工厂 (Simple Factory)模式:又称静态工厂模式(StaticFactory). 工厂方法 (Factroy Method)模式:又称多态性工厂模式(Polymorphic Factory). 抽象工厂 (Abstract Factroy)模式:又称工具箱模式