Builder_建造者模式
在构建复杂的对象时使用,可以分离复杂对象的构建和表示。
主要角色:
- 产品角色(Product):包含多个组成部件的复杂对象,我们要创建的目标对象。
- 抽象构建者(Builder):包含创建各部件的抽象方法的接口,和一个返回目标对象的方法。
- 具体构建者(Concrete Builder):实现接口,完成目标对象的创建方法。
- 指挥者(Director):调用构造者对象中的方法创建部件,完成目标对象的创建。
运用建造者模式创建类对象
产品角色(Product)
public class Product {
private String name;
private Product(){}
public void setName(String name) { this.name = name; }
@Override
public String toString() { return "name: "+name; }
}
抽象构建者(Builder)
public interface Builder {
void buildName(String name);
Product build();
}
具体构建者(Concrete Builder)
public class ConcreteBuilder implements Builder {
private Product product = new Product();
@Override
public void buildName(String name) { product.setName(name); }
@Override
public Product build() { return product; }
}
指挥者(Director)
public class Director {
private Builder builder;
public Director(Builder builder){ this.builder = builder; }
public Product construct(){
builder.buildName("lin");
return builder.build();
}
}
调用者(Caller)
public class Caller {
public static void main(String[] args) {
Product product = new Director(new ConcreteBuilder()).construct();
System.out.println(product.toString());
}
}
简化创建过程
建造者(Builder)模式在应用过程中可以根据需要改变,如果创建的产品种类只有一种,只需要一个具体建造者,这时可以省略掉抽象建造者,甚至可以省略掉指挥者角色。
- 使用内部类省略抽象建造者角色
public class Product {
private String name;
private Product(){}
private void setName(String name) { this.name = name; }
@Override
public String toString() { return "name: "+name; }
static class ProductBuilder {
private Product product = new Product();
public ProductBuilder buildName(String name){
product.setName(name);
return this;
}
public Product build(){ return product; }
}
}
- 使用链式调用省略指挥者角色
public class Caller {
public static void main(String[] args) {
String product = new Product.ProductBuilder().buildName("lin").build().toString();
System.out.println(product);
}
}
本文来自博客园,作者:独游空想家,转载请注明原文链接:https://www.cnblogs.com/linzhikai/p/16521547.html