博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【创建型】- 建造者模式
阅读量:6999 次
发布时间:2019-06-27

本文共 2121 字,大约阅读时间需要 7 分钟。

hot3.png

建造者模式


将一个对象的构建和表示分离,使得同样的构建过程可以创建不同的表示

角色

  • 抽象建造者builder:指定一个抽象接口,规范建造者对于生产的产品的各个组成部分的建造

  • 具体建造者:实现builder接口,构建和装配产品各个部件,定义并明确它所创建的表示,提供一个返回这个产品的接口

  • 指挥者Director:构建一个使用builder接口的对象,负责管理整个产品的流程

  • 产品角色Product:被构建的复杂对象,具体建造者创建该产品的内部表示并定义它的装配过程,它包含定义组成部件的类,包括这些部件装配成最终产品的接口


指挥者角色:Director

public class Director {	public void Build(AbstractBuilder builder){		builder.BuilderA();		builder.BuliderB();	}}

产品角色:Product

public class Product {	List
list=new ArrayList
(); //产品的部件集合 /** * 表示配件装配过程 * @param partName 产品部件名称 */ public void add(String partName){ list.add(partName); } public void show() { for(String str:list){ System.out.println(str); } }}

抽象建造者:AbstractBuilder

public abstract class AbstractBuilder {    	//构建部件B	public abstract void BuilderA();		//构建部件A	public abstract void BuliderB();		//取出产品	public abstract Product getProduct();}

具体建造者角色:

public class ConcreteBuilderA extends AbstractBuilder {    	private Product product = new Product();  //构建的目标对象		@Override	public void BuilderA() {           product.add("A建造者正在组装产品A部件.....");	}	@Override	public void BuliderB() {	       product.add("A建造者正在组装产品B部件.....");	}	@Override	public Product getProduct() {  //提供返回构建的目标对象的方法		return product;	}}
public class ConcreteBuilderB extends AbstractBuilder {    	private Product product=new Product();		@Override	public void BuilderA() {		product.add("B建造者正在组装产品A部件.....");	}	@Override	public void BuliderB() {		product.add("B建造者正在组装产品B部件.....");	}	@Override	public Product getProduct() {		return product;	}}

测试代码:

Director director = new Director();  //指挥者:负责产品部件的整个生产流程//调用A建造者生产产品AbstractBuilder builder = new ConcreteBuilderA(); director.Build(builder);  //制定负责整个产品生产的建造者Product product=builder.getProduct(); //获取建造者生产的产品product.show();System.out.println("-------------------");//调用B建造者生产产品builder = new ConcreteBuilderB();director.Build(builder);product = builder.getProduct();product.show();

通俗解释

汽车厂(指挥者)准备生产某型汽车,然后将零部件变速箱(产品)下单给汽车零部件供应商A/B(建造者),然后汽车零部件供应商A/B按照汽车厂的规范组装胜场生产变速箱,最后生产的产品交给汽车厂使用

经典使用:Java fluent风格代码(Lombok @Builder注解)

转载于:https://my.oschina.net/yangzhiwei256/blog/3012146

你可能感兴趣的文章
上传文件
查看>>
串口波形分析
查看>>
html5-css列表和表格
查看>>
【Web自动化测试——代码篇十二】自动化测试模型——数据驱动测试和关键字驱动测试...
查看>>
.net判断System.Data.DataRow中是否包含某列
查看>>
Design T-Shirt 排序
查看>>
javaweb项目中关于配置文件web.xml的解析
查看>>
循环语句
查看>>
noip rp++
查看>>
大数加法 (A + B Problem II)
查看>>
Are you sure you want to continue connecting etc ssh ssh_config StrictHostKeyChecking no
查看>>
草稿--cgi
查看>>
同步,异步,阻塞,非阻塞
查看>>
文件缓存
查看>>
bash Shell 中如何实现条件判断之if判断
查看>>
linux守护进程解读
查看>>
Windows操作系统单文件夹下到底能存放多少文件及单文件的最大容量
查看>>
POJ2079:Triangle——题解
查看>>
关于UITableView 不能回调 tableView: cellForRowAtIndexPath的问题
查看>>
linux 批量创建用户获取8位随机密码
查看>>