JAVA设计模式之 建造者模式【Builder Pattern】
来源:互联网 发布:fix you知乎 编辑:程序博客网 时间:2024/05/02 05:01
一、概述
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。核心在于如何一步步构建一个包含多个组成部件的完整对象,使用相同的构建过程构建不同的产品,建造者模式是一种对象创建型模式。
二、适用场景:复杂对象的组装和创建
(1) 用于复杂对象的组装和创建、对象间通常具有较多的共同点或是组成部分相似;
(2) 需要生成的对象的属性相互依赖,需要指定其生成顺序的情况;
(3) 对象的创建过程独立于创建该对象的类,隔离复杂对象的创建和使用,并使得相同的创建过程可以创建不同的产品;
三、UML类图结构
四、参与者
1、Builder(抽象建造者):它为创建一个产品Product对象的各个部件指定抽象接口,并有方法返回产品对象。
2、ConcreteBuilder(具体建造者):它实现了Builder接口或抽象方法,实现各个部件的具体构造和装配方法,定义并明确它所创建的复杂对象。
3、Product(产品角色):它是被构建的复杂对象,通常包含多个组成部件。
4、Director(指挥者):它负责安排复杂对象的建造次序,指挥者与抽象建造者之间存在关联关系,可以在其construct()建造方法中调用建造者对象的部件构造与装配方法,完成复杂对象的建造。
五、用例学习
1、被建造的对象:产品类 Product.java
/** * 被建造的对象:产品 * @author lvzb.software@qq.com * */public class Product {// 产品部件Aprivate String partA;// 产品部件B private String partB; // 产品部件C private String partC; public String getPartA() {return partA;}public void setPartA(String partA) {this.partA = partA;}public String getPartB() {return partB;}public void setPartB(String partB) {this.partB = partB;}public String getPartC() {return partC;}public void setPartC(String partC) {this.partC = partC;}}2、抽象建造者类[也可以为接口] Builder.java
/** * 抽象建造者 * @author lvzb.software@qq.com * */public abstract class Builder {protected Product product = new Product();protected abstract void buildPartA();protected abstract void buildPartB();protected abstract void buildPartC();public Product getProduct(){return product;}}3、具体的复杂产品的建造者类 ConcreteBuilder.java
/** * 具体的建造者对象<br> * 建造复杂产品的各个组成部件、最后由指挥者类<Director>进行组装成完整的产品对象 * @author lvzb.software@qq.com * */public class ConcreteBuilder extends Builder {@Overrideprotected void buildPartA() {product.setPartA("build Part A");System.out.println("正在建造产品部件A");}@Overrideprotected void buildPartB() {product.setPartB("build Part B");System.out.println("正在建造产品部件B");}@Overrideprotected void buildPartC() {product.setPartC("build Part C");System.out.println("正在建造产品部件C");}}4、复杂产品的组装 指挥者类:Director.java
/** * 指挥者<br> * 负责 安排/组装 复杂对象的建造次序 * @author lvzb.software@qq.com * */public class Director {private Builder builder;public Director(Builder builder){this.builder = builder;}/** * 产品对象的构建与组装 * @return */public Product construct(){System.out.println("--- 指挥者开始 构建产品 ---");builder.buildPartA();builder.buildPartB();builder.buildPartC();System.out.println("--- 指挥者 构建产品 完成 ---");return builder.getProduct();}}5、客户端调用测试类:Client.java
public class Client {public static void main(String[] args) {ConcreteBuilder cBuilder = new ConcreteBuilder();Director director = new Director(cBuilder);director.construct();}}6、程序运行效果:
--- 指挥者开始 构建产品 ---正在建造产品部件A正在建造产品部件B正在建造产品部件C--- 指挥者 构建产品 完成 ---
六、其他
在建造者模式中,客户端不必知道产品对象内部组成的细节,将产品本身与产品的创建过程解耦;每一个具体的建造者都相对独立,可以方便修改/新增具体的建造者而不会对其他的建造者造成影响、使系统扩展方便,符合“开闭原则”。
1 0
- JAVA设计模式之 建造者模式【Builder Pattern】
- Java之建造者模式(Builder Pattern)
- Java之建造者模式-Builder Pattern
- Java之建造者模式(Builder Pattern)
- 设计模式----建造者模式(Builder Pattern)
- 设计模式---建造者模式(Builder Pattern)
- 设计模式【建造者模式Builder Pattern】
- Net设计模式实例之建造者模式(Builder Pattern)
- C#设计模式之建造者模式(Builder Pattern)
- 设计模式(创建型)之建造者模式(Builder Pattern)
- 设计模式之建造者模式(Builder Pattern)
- Android设计模式之建造者模式(Builder Pattern)
- Android设计模式之建造者模式(builder pattern)
- Android设计模式之建造者模式(Builder Pattern)
- 设计模式总结之Builder Pattern(建造者模式)
- C#设计模式之建造者模式(Builder Pattern)
- Net设计模式实例之建造者模式(Builder Pattern)
- 设计模式之建造者模式(Builder Pattern)
- PHP GD库及jpgraph的安装与配置
- 网络通信的工作原理
- linux shell中的$0,$?,$!和<<'END'
- 从post获取的html源码的编码问题
- 黑马程序员--Java基础之集合
- JAVA设计模式之 建造者模式【Builder Pattern】
- 数据结构第三章思维导图
- 模拟登陆网站 之 C#版(内含两种版本的完整的可运行的代码)
- 黑马程序员-day14集合
- c++项目包含纯c文件编译方法
- Google Guice之牛刀小试
- 题目1510:替换空格
- s5pv210驱动之流水灯程序2
- H.264 视频 RTP 负载格式