设计模式之建造者模式

内容抄自《设计模式》清华大学出版社,2011

模式动机:
无论是在现实世界还是软件系统中,都存在一些复杂的对象,它们拥有对个组成部分,如汽车,包含发动机,方向盘,轮胎等等,对于大多数用户而言
无须知道这些部件的装配细节,也几乎不会单独使用某个部件,而是使用一辆完整的汽车,此时,就可以通过建造者模式对其进行设计与描述,建造者模式
可以将部件和其组装过程分开,一步步创建一个复杂的对象。

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

结构分析:

包含角色:
1、Builder 抽象建造者  (可省略)
2、ConcreteBuilder 具体建造者
3、Product 建造产品
4、Director 指挥者  (如果抽象建造者省略则这个也可省略)

模式分析:(抽象建造者)
 

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

栗子:

/** 建造者
 * @author Administrator
 *
 */
class BuilderModel {

	static class Product{
		public String name;
		public int price;
	}
	static abstract class Builder{
		protected Product product = new Product();
		public abstract void buildName();
		public abstract void buildPrice();
		public Product build(){
			return product;
		}
	}
	static class ConcreteBuilder extends Builder{
		@Override
		public void buildName() {
			this.product.name = "a";
		}
		@Override
		public void buildPrice() {
			this.product.price = 1;
		}
	}
	static class ZhiHui{
		public Product build(Builder builder){
			builder.buildName();
			builder.buildPrice();
			return builder.build();
		}
	}
	
	public static void main(String[] args) {
		ZhiHui hui = new ZhiHui();
		Product build = hui.build(new ConcreteBuilder());
		System.out.println(build.name);
	}
}

优点:

1.不必知道其具体细节,将产品本身和创建过程解耦
2.用户可以使用不同的建造者获得不同的产品
3.精细的控制创建过程
    
缺点:

1.产品之间差异大不适用
2.产品多样化可能会导致需要定义很多具体建造者,造成系统庞大
     
适用:

1.需要生成的产品有复杂的内部结构,
2.需要指定生成顺序
3.隔离复杂对象的创建,使得相同的创建过程可以创建不同的产品
     
扩展:
1.省略抽象建造者,如果系统中只需要一个具体的建造者,可以省略抽象建造者
2.省略指挥者,在1的条件下,可以省略,让具体建造者扮演

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值