设计模式: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
相关推荐
2685725942 分钟前
Java 23种设计模式 - 行为型模式11种
java·开发语言·设计模式
摘星编程3 小时前
并发设计模式实战系列(19):监视器(Monitor)
设计模式·并发编程
yangyang_z5 小时前
【C++设计模式之Strategy策略模式】
c++·设计模式·策略模式
-qOVOp-5 小时前
zst-2001 历年真题 设计模式
java·算法·设计模式
碎梦归途20 小时前
23种设计模式-行为型模式之模板方法模式(Java版本)
java·开发语言·jvm·设计模式·软考·模板方法模式·软件设计师
YoseZang1 天前
【设计模式】GoF设计模式之策略模式(Strategy Pattern)
设计模式·策略模式
世纪摆渡人1 天前
设计模式-策略模式(Strategy Pattern)
设计模式·策略模式
yangyang_z1 天前
【C++设计模式之Observer观察者模式】
c++·观察者模式·设计模式
Hxyle2 天前
c++设计模式
开发语言·c++·设计模式
摘星编程2 天前
并发设计模式实战系列(17):信号量(Semaphore)
设计模式·并发编程