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);
}
}
posted @   独游空想家  阅读(41)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
点击右上角即可分享
微信分享提示