当前位置: 首页 > article >正文

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

目录

0、定义

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

2、生成器模式的UML类图

3、示例代码


0、定义

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

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

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

2、生成器模式的UML类图

3、示例代码

具体产品

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;
	}

	
}

抽象生成器

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

}

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

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;
	}

}

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

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();
	}
	

}

客户端(使用)

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());

	}

}

输出结果:

AAA
BBB


http://www.kler.cn/a/420801.html

相关文章:

  • linux模拟试题
  • delphi 12 idhttpsever(S)+idhttp(C) 实现简单的JSON API服务
  • SpringBoot集成Milvus|(实现向量的存储和查询)
  • 开发一套ERP 数据库规整
  • 【CSS】小球旋转loading加载动画
  • 自动化检测三维扫描仪-三维扫描仪检测-三维建模自动蓝光测量系统
  • TinyXML2的一些用法
  • dpwwn02靶场
  • 探讨播客的生态系统
  • 第 41 章 - Go语言 软件工程原则
  • 目标检测标注图像
  • 目标检测模型和图像分割模型
  • ES6 对象扩展全解析:属性简写、表达式、super 关键字等的深度应用
  • Qt5语法的connect指定多个重载信号槽函数中的具体某一个
  • Day6 洛谷 1426+1425+1424+1423+1422+1614+1634+1639
  • 基于Springboot + Vue开发的美食探索及分享平台
  • Maxwell的入门实战
  • java基础概念46-数据结构1
  • Rust循环引用与多线程并发
  • 浏览器中输入一个URL后,按下回车后发生了什么
  • Truffle和Remix简介
  • 基础原型链污染
  • K8S资源之secret资源
  • 基于Java Springboot传统戏曲推广微信小程序
  • 泷羽sec-burp功能介绍(1) 学习笔记
  • Python爬取机车网车型数据并存入Mysql数据库