设计模式之生成器模式

生成器模式

内容:将一个复杂对象的构建与其表示分离,使得同样的构建过程可以产生出不同的表示。

结构:

1、产品:具体生成器要构造的复杂对象。

2、抽象生成器:定义了生成复杂对象各个组成部分的抽象方法,并定义了返回产品实例的方法。

3、具体生成器:抽象生成器的子类,实现了抽象生成器中的抽象方法。

4、指挥者:其是一个包含生成器引用的类,通过不同的生成器来为用户构造出不同的产品对象。

UML类图:


优点:

将对象的构造过程封装在具体的生成器中,用户使用不同的生成器就可以得到不同的产品对象,生成器模式可以精细的控制产品对象的构造过程,用户无须了解产品对象的具体组件,可以随时增加具体生成器,但指挥者无须做任何变动。

适用情境:

系统要求对象的构造过程必须独立于创建该对象的类时;无法通过构造方法来创建内部复杂的对象。

使用实例:

//定义包含了两个组件的产品
public class Product {
	String stringComponent;
	Integer integerComponent;
	
	public String getStringComponent() {
		return stringComponent;
	}
	public Integer getIntegerComponent() {
		return integerComponent;
	}
	
}
//定义抽象生成器
public interface Builder {
	public abstract void buildStringComponent();
	public abstract void buildIntegerComponent();
	public abstract Product getProduct();

}
//具体生成器A
public class ABuilder implements Builder {
	private Product product;
	
	public ABuilder(){
		this.product = new Product();
	}

	@Override
	public void buildStringComponent() {
		// TODO Auto-generated method stub
		this.product.stringComponent = new String("AAA");
	}

	@Override
	public void buildIntegerComponent() {
		// TODO Auto-generated method stub
		this.product.integerComponent = new Integer(0+'A');
	}

	@Override
	public Product getProduct() {
		// TODO Auto-generated method stub
		return this.product;
	}

}
//具体生成器B
public class BBuilder implements Builder {
	private Product product;
	
	public BBuilder(){
		this.product = new Product();
	}

	@Override
	public void buildStringComponent() {
		// TODO Auto-generated method stub
		this.product.stringComponent = new String("BBB");
	}

	@Override
	public void buildIntegerComponent() {
		// TODO Auto-generated method stub
		this.product.integerComponent = new Integer(0+'B');
	}

	@Override
	public Product getProduct() {
		// TODO Auto-generated method stub
		return this.product;
	}

}
//指挥者
public class Director {
	private Builder builder;
	
	public Director(Builder builder){
		this.builder = builder;
	}
	
	public Product constructProduct() {
		this.builder.buildStringComponent();
		this.builder.buildIntegerComponent();
		return this.builder.getProduct();
	}

}
public class Test {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Builder builder = new ABuilder();
		Director director = new Director(builder);
		Product product = director.constructProduct();
		System.out.println(product.getStringComponent()+":"+product.getIntegerComponent());
		
		builder = new BBuilder();
		director = new Director(builder);
		product = director.constructProduct();
		System.out.println(product.getStringComponent()+":"+product.getIntegerComponent());
	}

}
生成器模式的精髓是将一个含有多个组件的对象的创建过程分成若干步骤,并将这些步骤封装在一个称为生成器的接口中。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值