设计模式--Builder模式的理解

Builder模式是什么?

将一个复杂对象的构建过程与它每一过程中的实现细节分离,使得用同样的构建过程可以创建不同的产品对象。

Builder模式的结构


建造者(Builder)角色:给出一个抽象接口,以规范产品对象的各个组成成分的建造。一般而言,此接口独立于应用程序的商业逻辑。模式中直接创建产品对象的是具体建造者(ConcreteBuilder)角色。具体建造者类必须实现这个接口所要求的方法:一个是建造方法,另一个是结果返还方法。

具体建造者(ConcreteBuilder)角色:担任这个角色的是于应用程序紧密相关的类,它们在应用程序调用下创建产品实例。这个角色主要完成的任务包括:

 •实现Builder角色提供的接口,一步一步完成创建产品实例的过程。

•在建造过程完成后,提供产品的实例。

指导者(Director)角色:担任这个角色的类调用具体建造者角色以创建产品对象。导演者并没有产品类的具体知识,真正拥有产品类的具体知识的是具体建造者对象。

产品(Product)角色:产品便是建造中的复杂对象。

指导者角色是于客户端打交道的角色。导演者角色将客户端创建产品的请求划分为对各个零件的建造请求,再将这些请求委派给具体建造者角色。具体建造者角色是做具体建造工作的,但却不为客户端所知。

Builder模式的变体

将ConcreteBuilder放在Product的内部,将Product的Constructor设为private,这样创建Product方法时就只能通过Builder来创建,而不能直接调用new Product()。

public class Product {
	private ArrayList<String> parts = new ArrayList<String>();
    private Product(ConcreteBuilder builder){
	//some initialization
    }
	public void add(String part) {
		parts.add(part);
	}

	public void show() {
		System.out.println("Product parts: ");
		for (String part : parts) {
			System.out.println(part);
		}
	}
	
	public static class ConcreteBuilder{
		private Product product;
		public Product build(){
			product = new Product(this);
			buildPartA();
			buildPartB();
			return product;
		}
		
		public void buildPartA() {
			product.add("ConcreteBuilder1-->partA");
		}

		public void buildPartB() {
			product.add("ConcreteBuilder1-->partB");
		}
		
		public Product getResult(){
			return product;
		}
	}
}
public class Client {
    public static void main(String[] args){
	ConcreteBuilder builder = new ConcreteBuilder();
	builder.build();
	Product product = builder.getResult();
	product.show();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值