设计模式: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
相关推荐
basketball61614 分钟前
设计模式入门:5. 代理模式详解 C++实现
c++·设计模式·代理模式
zzqssliu1 小时前
跨境代购系统的物流和通知模块重构思考:从设计模式到生产落地
java·设计模式·重构
linweidong2 小时前
iOS 开发面试 50 个高频易混淆知识点详解
ios·设计模式·面试·cocoa·uikit·uiview·uistackview
艾利克斯冰4 小时前
Java设计模式详解-七大设计原则(持续更新中)
设计模式·uml·开闭原则
c++之路17 小时前
C++ 设计模式全总结
java·c++·设计模式
爱吃牛肉的大老虎19 小时前
Spring中用到的设计模式
java·spring·设计模式
代码中介商19 小时前
C++四大设计模式:单例、工厂、观察者、策略
java·c++·设计模式
basketball61620 小时前
设计模式入门:3. 适配器模式详解 C++实现
c++·设计模式·适配器模式
AI大法师20 小时前
最小视觉系统怎么搭:Logo、颜色、字体、模板和品牌介绍先做什么
人工智能·设计模式·新媒体运营
geovindu1 天前
python: N-Barrier Pattern
开发语言·python·设计模式·屏障模式