设计模式之建造者模式
1、定义
建造者模式(Builder),将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
2、UML类图
3、代码实现
Builder.java
package com.wangzw.springboot_quick.design.builder.example;
/**
* @author wangzw
* @since 2020-12-17 15:50
*/
public abstract class Builder {
/**
* 构建部件A
*/
public abstract void buildPartA();
/**
* 构建部件B
*/
public abstract void buildPartB();
/**
* 获取产品的构建结果
* @return 商品信息
*/
public abstract Product getResult();
}
具体的建造者:ConcreteBuilder1.java
package com.wangzw.springboot_quick.design.builder.example;
/**具体建造者
* @author wangzw
* @since 2020-12-17 15:52
*/
public class ConcreteBuilder1 extends Builder {
private Product product = new Product();
@Override
public void buildPartA() {
product.add("部件A");
}
@Override
public void buildPartB() {
product.add("部件B");
}
@Override
public Product getResult() {
return product;
}
}
ConcreteBuilder2.java
package com.wangzw.springboot_quick.design.builder.example;
/**具体建造者
* @author wangzw
* @since 2020-12-17 15:52
*/
public class ConcreteBuilder2 extends Builder {
private Product product = new Product();
@Override
public void buildPartA() {
product.add("部件X");
}
@Override
public void buildPartB() {
product.add("部件Y");
}
@Override
public Product getResult() {
return product;
}
}
指挥者类:Director.java
package com.wangzw.springboot_quick.design.builder.example;
/**
* @author wangzw
* @since 2020-12-17 15:55
*/
public class Director {
public void construct(Builder builder) {
builder.buildPartA();
builder.buildPartB();
}
}
构建的产品类:Product.java
package com.wangzw.springboot_quick.design.builder.example;
import java.util.ArrayList;
import java.util.List;
/**
* @Author wangzw
* @Date 2020/12/17 15:12
* @Version 1.0
*/
public class Product {
private List<String> parts = new ArrayList<>();
public void add(String part) {
parts.add(part);
}
public void show() {
System.out.println("产品 创建---");
parts.stream().forEach(System.out::println);
}
}
客户端代码:Run.java
package com.wangzw.springboot_quick.design.builder.example;
/**
* @author wangzw
* @since 2020-12-17 15:55
*/
public class Run {
public static void main(String[] args) {
//创建指挥者对象
Director director = new Director();
Builder b1 = new ConcreteBuilder1();
director.construct(b1);
Product p1 = b1.getResult();
p1.show();
Builder b2 = new ConcreteBuilder2();
director.construct(b2);
Product p2 = b2.getResult();
p2.show();
}
}
4、总结
建造者模式是逐步构建产品的,所以建造者的Builder类里的那些构造方法必须要足够普遍,以便为各种类型的具体建造者构造。
建造者模式是在当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时适用的模式。