05建造者模式

建造者模式/生成器模式

<设计模式其实很简单>笔记


①定义:

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


②代码:
//抽象的建造者类
public abstract class Builder{
	public abstract void BuildPartA();
	public abstract void BuildPartB();
	public abstract Product GetResult();
}
//具体的产品类
public class Product{
	ArrayList<String> parts = new ArrayList<String>();
	public void Add(String part){
		parts.add(part);
	}
	public void Show(){
		System.out.println("Create product");
		for(int i = 0 ; i<parts.size() ; i++) System.out.println(parts.get(i));
	}
}
//建造者类 1 
public class ConcreteBuilderA extends Builder{
	private Product product = new Product();
	//覆盖父类方法
	@Override
	public void BuildPartA(){
		product.Add("Part A");
	}
	@Override
	public void BuildPartB(){
		product.Add("Part B");
	}
	@Override
	public void GetResult(){
		return product;
	}
}
//建造者类 2
public class ConcreteBuilderB extends Builder{
	private Product product = new Product();	
	//覆盖父类方法
	@Override
	public void BuildPartA(){
		product.Add("Part W");
	}
	@Override
	public void BuildPartB(){
		product.Add("Part Z");
	}
	@Override
	public void GetResult(){
		return product;
	}
}
//指挥者类
public class Director{
	public void Construct(Builder builder){
		builder.BuildPartA();
		builder.BuildPartB();
	}
}
//客户端代码
public static void main(String[] args){
	Director director = new Director();//指挥者
	Builder builderA = new ConcreteBuilderA();//建造者
	Builder builderB = new ConcreteBuilderB();  //建造者

	//指挥者建造A
	director.Construct(builderA);
	Product productA = builderA.GetResult();
	productA.Show();


	//指挥者建造B
	director.Construct(builderB);
	Product productB = builderB.GetResult();
	productA.Show();
}

解释 

--指挥者:指挥创建对象的各种操作(需要先调用什么方法,然后再做什么操作,指挥者按部就班
地指挥一个对象的创建) --> 负责复杂对象的构建过程
--建造者:根据不同的需求,构建不同的对象。  --> 创建不同的表示
③与工厂模式的比较
建造者模式和工厂模式都是创建型模式,目的都是得到一个对象。但侧重点不同。
工厂模式在于将对象的实例化延迟到子类中,而创建者模式则是保持一个对象创建过程的稳定性。
工厂模式专注于创造相同表象的对象,但当希望得到具有多种表象的实例时,使用建造者模式更佳
④优点:
--创建者隐藏产品的组装过程,用户只需指定要创建的类型就行。体现了依赖倒转原则,抽象不依
赖与细节,细节依赖于抽象。
--体现了多态(需要改变一个产品的内部表示,只需再定义一个建造者)。
--每一个具体建造者都是相对独立的。
--增加新的具体建造者不用修改原有类库的代码。 符合开放-封闭原则
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值