设计模式:15、生成器模式

目录

0、定义

1、生成器模式的四种角色

2、生成器模式的UML类图

3、示例代码


0、定义

将一个复杂对象的构建与它的表示分离,使同样的构建过程可以创建不同的表示。

1、生成器模式的四种角色

  • 产品(Product):具体生成器要构造的复杂对象
  • 抽象生成器(Builder):抽象生产器是一个接口,该接口除了为创建一个Product对象的各个组件定义了若干个方法外,还要定义返回Product对象的方法。
  • 具体生成器(ConcreteBuilder):实现Builder接口的类,具体生成器将实现Builder接口所定义的方法。
  • 指挥者(Director):指挥者 是一个类,该类需含有Builder接口声明的变量。指挥者 的职责是负责向用户提供具体产品 ,即指挥者 将请求生成器来构造用户所需要的Product对象。

2、生成器模式的UML类图

3、示例代码

具体产品

java 复制代码
package xyz.jangle.design.builder;
/**
 * 具体产品
 * @author Administrator
 *
 */
public class Product {
	
	private String a,b;

	public String getA() {
		return a;
	}

	public void setA(String a) {
		this.a = a;
	}

	public String getB() {
		return b;
	}

	public void setB(String b) {
		this.b = b;
	}

	
}

抽象生成器

java 复制代码
package xyz.jangle.design.builder;
/**
 * 抽象生成器
 * @author Administrator
 *
 */
public interface Builder {
	/**
	 * 创建产品的A属性
	 */
	public void buildComponentA();
	/**
	 * 创建产品的B属性
	 */
	public void buildComponentB();
	/**
	 * 返回产品
	 * @return
	 */
	public Product getProduct();

}

具体生成器(对拓展开放,可以再额外的创建具体生成器2

java 复制代码
package xyz.jangle.design.builder;

public class ConcreteBuilder implements Builder {
	
	private Product product;

	public ConcreteBuilder() {
		super();
		this.product = new Product();
	}

	@Override
	public void buildComponentA() {
		product.setA("AAA");
	}

	@Override
	public void buildComponentB() {
		product.setB("BBB");
	}

	@Override
	public Product getProduct() {
		return product;
	}

}

指挥者(对修改关闭,即指挥者的代码不能变动)

java 复制代码
package xyz.jangle.design.builder;

public class Director {
	
	private Builder builder;

	public Director(Builder builder) {
		super();
		this.builder = builder;
	}
	
	public Product constructComponent() {
		builder.buildComponentA();
		builder.buildComponentB();
		return builder.getProduct();
	}
	

}

客户端(使用)

java 复制代码
package xyz.jangle.design.builder;

public class AppMain15 {

	public static void main(String[] args) {
		
		Builder builder = new ConcreteBuilder();
		Director director = new Director(builder);
		Product product = director.constructComponent();
		System.out.println(product.getA());
		System.out.println(product.getB());

	}

}

输出结果:

bash 复制代码
AAA
BBB
相关推荐
咖啡八杯2 天前
GoF设计模式——备忘录模式
java·后端·spring·设计模式
槑有老呆2 天前
从 Prompt Engineering 到 Harness Engineering:AI 编程的下一次跃迁
设计模式
HjhIron2 天前
从Prompt到Context:大模型应用开发的范式转移
设计模式·aigc·ai编程
咖啡八杯4 天前
GoF设计模式——中介者模式
java·后端·spring·设计模式
胡萝卜术4 天前
从“分数打架”到“排名投票”:为什么你的ChatBI必须用RRF?
算法·设计模式·面试
亦暖筑序5 天前
Java 8老系统Browser Agent实战:三层拦截把AI操作后台变成可审计流程
java·后端·设计模式
青禾网络7 天前
Web 前端如何接入 AI 音效生成:从零到可用的完整方案
人工智能·设计模式
ZJPRENO8 天前
吃透软件开发六大设计原则,告别烂代码
设计模式
咖啡八杯8 天前
GoF设计模式——命令模式
java·设计模式·架构
花椒技术9 天前
HJPusher / HJPlayer SDK 实践:我们为什么把直播推播链路拆成一套可复用能力
设计模式·harmonyos·直播