设计模式: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的10次方啊21 小时前
设计模式与生活⑤:天冷了,给电动车套件挡风被
设计模式
昭昭日月明2 天前
AI 时代的《重构》
设计模式·架构
工一木子2 天前
设计模式与生活③:你的早晨,是一套模板
设计模式
是2的10次方啊2 天前
设计模式与生活④:冰箱空了,早餐换个买法
设计模式
知守观2 天前
设计模式实战:从真实老项目中看标准模板方法与工厂的落地
java·spring·设计模式
多弗朗皮卡丘3 天前
C++特殊类设计
开发语言·c++·设计模式
Carl_奕然3 天前
【智能体】Loop 的四种设计模式之:Verification Loop(2026 最新版)
人工智能·python·设计模式
是2的10次方啊3 天前
设计模式与生活③:你的早晨,是一套模板
设计模式
.Hypocritical.4 天前
JUC + 三大设计模式(单例、工厂、代理)
设计模式·juc·1024程序员节
是2的10次方啊4 天前
设计模式与生活②:你只管点外卖,别管堡怎么做
设计模式