创建者模式-建造者模式
Posted zhaoqiang-lab
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了创建者模式-建造者模式相关的知识,希望对你有一定的参考价值。
建造者模式
一、概述
? 将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
二、机构模式图
1. 建造者(Builder): 为创建一个产品对象的各个部件指定抽象接口
2. 具体建造者(ConcreteBuider):实现Builder的接口,以构建和装配该产品的各个部分,定义并明确它所创建的表示,并提供一个检索产品的接口。
3. 指挥者(Director):指挥并构造一个使用Builder 接口的的对象
4. 产品(produce):表示被构造的复杂对象。ConcreteBuilder 创建该产品的内部表示并定义它的装配日过程,包含定义组成部件的类,包括将这些部件装配成最终产品的接口。
三、代码示例
-
要建造的具体产品
/** * 具体产品类(这里以创建一个布娃娃为例) */ public class RagdollProduct { // 头 private String head; //可以是任意类型 // 身体 private String body; // 胳膊 private String arm; // 腿 private String leg; // get、set、toString 省略... }
-
抽象建造者与具体建造者【抽象建造者中定义了产品的创建方法和返回方法;具体建造者类中实现了抽象建造者类的抽象接口,构建和装配各个部件】
/** * 定义产品的创建方法和返回方法 */ public abstract class Builder { protected RagdollProduct product = new RagdollProduct(); public abstract void buildHead(); public abstract void buildBody(); public abstract void buildArm(); public abstract void buildLeg(); public RagdollProduct getResult() { return product; } } /** * 实现各个部分的装配方法 */ public class BuilderAdapter extends Builder { @Override public void buildHead() { product.setHead("布娃娃头"); System.out.println("添加布娃娃的头..."); } @Override public void buildBody() { product.setBody("布娃娃身体"); System.out.println("添加布娃娃的身体..."); } @Override public void buildArm() { product.setArm("布娃娃胳膊"); System.out.println("添加布娃娃的胳膊..."); } @Override public void buildLeg() { product.setLeg("布娃娃腿"); System.out.println("添加布娃娃的退..."); } }
-
指挥者类(Director),该类的主要作用有两个;一方面,它隔离了客户与生产过程;另一方面,它负责控制产品的生产过程。指挥者针对抽象建造者编程,客户端只需要知道具体建造者的类型,即可通过指挥者类调用建造者的相关方法,返回一个完整的产品对象。
/** * 指挥者类 */ public class Director { private Builder builder; // 构造方法注入builder 对象 public Director( Builder builder ){ this.builder = builder; } // 定义指挥者创建一个布娃娃的过程 public RagdollProduct construct(){ builder.buildHead(); builder.buildBody(); builder.buildArm(); builder.buildLeg(); return builder.getResult(); } }
-
测试
public class Test { public static void main(String[] args) { Builder builder = new BuilderAdapter(); Director director = new Director(builder); RagdollProduct construct = director.construct(); System.out.println("一个完整的布娃娃:" + construct); } }
五、模式总结
-
优点:
- 用户只要指定建造者的类型就可以得到他们,而具体的建造过程和细节不需要知道。
- 建造代码与表示相分离,如果要改变一个产品的内部表示,只要再定义一个具体的建造者就可以了。
- 建造过程由指挥者来控制,建造细节由一个抽象类来控制,对于实现见制造细节的具体类来说,不会遗漏某一个步骤
-
缺点:
加入现在需要增加创建产品的一个细节,
-
适用范围
- 当创建复杂对象的算法,应该独立于该对象的组成部分以及他们的装配方式时
- 当复杂对象的部件相对稳定,不会发生变化时
以上是关于创建者模式-建造者模式的主要内容,如果未能解决你的问题,请参考以下文章
设计模式从青铜到王者第八篇:创建型模式之建造者模式(BuilderPattern)