建造者模式(Builder Pattern)

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

建造者模式是一步一步创建一个复杂对象,它允许用户只通过指定复杂对象的类型和内容就可以构建它们,用户不需要知道内部的具体构建细节。

2.模式结构

建造者模式


3.建造者模式包含如下角色:
(1)Builder(抽象建造者)        
    抽象建造者为创建一个产品Product对象的各个部件指定抽象接口,在该接口中一般声明两类方法,一类是builderPartX(),它们用于创建复杂对象的各个部件,另一类方法是getResult(),它们用于返回复杂对象。它既可以是抽象类,也可以是接口。
 (2)ConcreteBuilder(具体建造者)
     具体建造者实现了Builder接口,实现了各个部件的构造和配置方法,定义并明确它所创建的复杂对象,也可以提供一个方法返回创建好的复杂产品对象。
  (3)Product(产品角色)
      产品角色是被构建的复杂对象,包含多个组成部件,具体建造者创建该产品的内部表示并定义它的装配过程。
  (4)Director(指挥者)
      智慧指挥者又称导演类,它负责安排复杂对象的建造次序,指挥者与抽象建造者之间存在关联关系,可以在其consturct()建造方法中调用建造者对象的部件构造与装配方法,完成复杂对象的构建
  建造者模式中引入了指挥者Director,该类的主要作用有两个:一方面它隔离了客户和生产过程,另一方面它负责控制产品的生成过程。指挥者针对抽象建造者编程,客户端只需要知道具体建造者的类型,即可通过指挥者类调用建造者的相关方法,返回一个完整的产品对象。
4.建造者模式实例
(1)产品类

public class Product {
	
	private String partA;
	private String partB;
	private String partC;
	public String getPartA() {
		return partA;
	}
	public void setPartA(String partA) {
		this.partA = partA;
	}
	public String getPartB() {
		return partB;
	}
	public void setPartB(String partB) {
		this.partB = partB;
	}
	public String getPartC() {
		return partC;
	}
	public void setPartC(String partC) {
		this.partC = partC;
	}
	
}

(2)抽象建造者类

public abstract class Builder {
	
	Product product=new Product();
	
	public abstract void buildPartA();
	public abstract void buildPartB();
	public abstract void buildPartC();
	
	public Product getResult(){
		return product;
	}
	
}

在抽象类Builder中声明了抽象的builderPartX()方法,具体建造过程在子类中实现,此外还提供了工厂方法getResult(),用于返回一个建造好的完整产品类。

(3)具体建造者类

public class ConcreteBuilder extends Builder{

	public void buildPartA() {
		product.setPartA("partA");
		
	}

	public void buildPartB() {
		product.setPartB("partB");
		
	}

	public void buildPartC() {
		product.setPartC("partC");
		
	}

(4)指挥者类

​public class Director {
	
	private Builder builder;
	
	public Director(Builder Builder){
		this.builder=Builder;
	}
	
	public Product construct(){
		builder.buildPartB();
		builder.buildPartA();
		builder.buildPartC();
		return builder.getResult();
	}
}​

一个在指挥者类中传入一个建造者Builder类型的对象,其核心在于提供一个建造方法construct(),在该方法中调用builder对象的构造部件的方法,最后返回一个产品对象。在constuct方法中还指定了builderPartX()的执行次序。

(5)测试类
 

​public class Test {
	
	public static void main(String[] args)  {
		//确定具体的创建者
		Builder builder=new ConcreteBuilder(); 
				
		//确定指挥者
		Director  dirctor=new Director(builder);

		//指挥者指挥创建产品
		Product product=dirctor.constuct();

		System.out.println("创建结果:");
		System.out.println(product.getPartA());
		System.out.println(product.getPartB());
		System.out.println(product.getPartC());
	}
}​

对于具体的建造者ConcreteBuilder,也可以通过配置文件的形式来存储具体的建造者类的类名,使得更换新的建造者无需修改源码,系统扩展更加方便。在客户端代码中,无需关心产品对象的具体组装过程,只需确定具体建造者即可,建造者模式将复杂类型的对象的构建与对象的表现分离开来,这样使得同样的构建过程可以创建出不同的过程。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值