内容简介:建造者模式(builder)是创建一个复杂对象的创建型模式,将构建复杂对象的过程和它的部件解耦,使得构建过程和部件的表示分离开来。建造者模式角色:抽象建造者(Builder)角色:给出一个抽象接口,以规范产品对象的各个组成成分的建造。一般而言,此接口独立应用程序的商业逻辑。模式中直接创建产品对象的是具体建造者(ConcreteBuilder)角色。具体建造者类必须实现这个接口所要求的两种方法:一种是建造方法(buildPart1和buildPart2),另一种是返还结构方法(retrieveResult)。
建造者模式(builder)是创建一个复杂对象的创建型模式,将构建复杂对象的过程和它的部件解耦,使得构建过程和部件的表示分离开来。
UML结构
建造者模式角色:
抽象建造者(Builder)角色:给出一个抽象接口,以规范产品对象的各个组成成分的建造。一般而言,此接口独立应用程序的商业逻辑。模式中直接创建产品对象的是具体建造者(ConcreteBuilder)角色。具体建造者类必须实现这个接口所要求的两种方法:一种是建造方法(buildPart1和buildPart2),另一种是返还结构方法(retrieveResult)。一般来说,产品所包含的零件数目与建造方法的数目相符。换言之,有多少 零件,就有多少相应的建造方法。
具体建造者(ConcreteBuilder)角色:担任这个角色的是与应用程序紧密相关的一些类,它们在应用程序调用下创建产品的实例。这个角色要完成的任务包括:1.实现抽象建造者Builder所声明的接口,给出一步一步地完成创建产品实例的操作。2.在建造过程完成后,提供产品的实例。
导演者(Director)角色:担任这个角色的类调用具体建造者角色以创建产品对象。应当指出的是,导演者角色并没有产品类的具体知识,真正拥有产品类的具体知识的是具体建造者角色。
产品(Product)角色:产品便是建造中的复杂对象。一般来说,一个系统中会有多于一个的产品类,而且这些产品类并不一定有共同的接口,而完全可以是不相关联的。
实例代码
目录结构:
Porsche
我们使用建造者模式, 创建一辆 保时捷(Porsche) 来溜达溜达,大体上一辆车主要有以下属性(简单列举了几个)
public class Porsche { //引擎 private String engine; //气缸 private String cylinder; //车架 private String frame; // 省略 get/set method } 复制代码
Builder
抽象Builder类, 列举我们在创建一辆车过程中,需要安装哪些部件
public abstract class Builder { public abstract void buildEngine(String engine); public abstract void buildCylinder(String cylinder); public abstract void buildFrame(String frame); public abstract Porsche create(); } 复制代码
PorscheBuilder
具体实现创建的方法,用于创建车辆
public class PorscheBuilder extends Builder { private Porsche porsche = new Porsche(); public void buildEngine(String engine) { porsche.setEngine(engine); } public void buildCylinder(String cylinder) { porsche.setCylinder(cylinder); } public void buildFrame(String frame) { porsche.setFrame(frame); } public Porsche create() { return porsche; } } 复制代码
Director
指挥官, 负责创建过程中的流程编排
public class Director { private Builder builder; public Director(Builder builder) { this.builder = builder; } public Porsche createPorsche(String engine, String cylinder, String frame) { builder.buildEngine(engine); builder.buildCylinder(cylinder); builder.buildFrame(frame); return builder.create(); } } 复制代码
客户端调用
class create { public static void main(String[] args) { Builder builder = new PorscheBuilder(); Director director = new Director(builder); //组装车辆 director.createPorsche("engine","cylinder","frame"); } } 复制代码
特性
使用场景
- 当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。
- 相同的方法,不同的执行顺序,产生不同的事件结果时。
- 多个部件或零件,都可以装配到一个对象中,但是产生的运行结果又不相同时。
- 产品类非常复杂,或者产品类中的调用顺序不同产生了不同的效能。
- 创建一些复杂的对象时,这些对象的内部组成构件间的建造顺序是稳定的,但是对象的内部组成构件面临着复杂的变化。
优缺点
- 优点: 使用建造者模式可以使客户端不必知道产品内部组成的细节。 具体的建造者类之间是相互独立的,容易扩展。 由于具体的建造者是独立的,因此可以对建造过程逐步细化,而不对其他的模块产生任何影响。
- 缺点: 产生多余的Build对象以及Dirextor类。
参考:
以上所述就是小编给大家介绍的《设计模式小抄(二) -- 建造者模式》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 设计模式——订阅模式(观察者模式)
- 设计模式-简单工厂、工厂方法模式、抽象工厂模式
- java23种设计模式-门面模式(外观模式)
- 设计模式-享元设计模式
- Java 设计模式之工厂方法模式与抽象工厂模式
- JAVA设计模式之模板方法模式和建造者模式
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。