(13)好菜每回味不同——建造者模式

建造者模式

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

通俗来说就是你只需要指定创建的类型是什么,创建的过程不变,就可以得到不同的表示对象。

使用建造者模式首先定义一个产品类,然后通过产品类知道需要具体建造哪些部分,然后创建建造者类,定义好创建的抽象方法,再创建具体建造者类,实现具体的内容,最后创建一个指挥者类,来指挥建造过程.

import javax.naming.directory.DirContext;

class Product
{
	 a,b,c;
	public void show()
	{
		System.out.println(a+b+c);
	}
}

abstract class Builder
{
	public abstract void BuilderA();
	public abstract void BuilderB();
	public abstract void BuilderC();
	public abstract Product getProduct();
}

class ConcreteBuilder1 extends Builder
{
	private Product product = new Product();
	@Override
	public void BuilderA()
	{
		product.a = 功能3;
	}

	@Override
	public void BuilderB() {
		// TODO Auto-generated method stub
		product.b = 功能4;
	}

	@Override
	public void BuilderC() {
		// TODO Auto-generated method stub
		product.c = 功能5;
	}

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

class ConcreteBuilder2 extends Builder
{
	private Product product = new Product();
	@Override
	public void BuilderA() {
		// TODO Auto-generated method stub
		product.a = 功能6;
	}

	@Override
	public void BuilderB() {
		// TODO Auto-generated method stub
		product.b = 功能7;
	}

	@Override
	public void BuilderC() {
		// TODO Auto-generated method stub
		product.c = 功能8;
	}

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

class Director
{
	public void Construct(Builder builder)
	{
		builder.BuilderA();
		builder.BuilderB();
		builder.BuilderC();
	}
}

class Client
{
	public static void main()
	{
		Director director = new Director();
		ConcreteBuilder1 b1 = new ConcreteBuilder1();
		ConcreteBuilder2 b2 = new ConcreteBuilder2();
		
		director.Construct(b1);
		Product p1 = b1.getProduct();
		
		director.Construct(b1);
		Product p2 = b2.getProduct();
	}
}

建造者模式把创建对象时装配的代码隐藏起来了,当创建新的对象的时候不需要了解创建的过程,只需要知道需要创建哪一种对象即可。

建造者模式创建的对象一般都是内部结构的建造顺序通常时稳定的,但对象内部的构建通常面临者许多变化。

同时用建造者模式创建复杂的对象,在给其添加功能时可以节约很多代码,相当于把很多重复的代码写到了具体的创建类中,同时需要增加具有新功能的对象的时候只需要再多写一个具体建造者类就可以了。

总结

建造者模式是在当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时适用的模式。(摘抄)

当使用建造建议灵活使用,不要呆板的去套用这个规则,例如这个对象在整个程序中都只需要创建一次,那就没有必要再去把它抽象成这种建造者模式了。

文章导航