建造者模式

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

类图:

Director:建造者模式_第1张图片

package 建造者模式;

/**
 * 指挥者,调用builder的方法。
 * @author C_Y
 *
 */
public class Director {
    public void Construct(Builder builder) {
        builder.BuildPartA();
        builder.BuildPartB();
    }
}

package 建造者模式;

/**
 * 建造者接口,各个部件的抽象方法。
 * @author C_Y
 *
 */
public interface Builder {
	public void BuildPartA();
	public void BuildPartB();
	public Product GetResult();
}

package 建造者模式;
/**
 * 具体建造者,实现具体的方法。
 * @author C_Y
 *
 */
public class ConcreteBuilder1 implements Builder {

    private Product product=new Product();
    @Override
    public void BuildPartA() {
        product.Add("部件A");
    }

    @Override
    public void BuildPartB() {
        product.Add("部件B");
    }

    @Override
    public Product GetResult() {

        return product;
    }

    

}

package 建造者模式;

/**
 * 具体建造者,实现具体的方法。
 * @author C_Y
 *
 */
public class ConcreteBuilder2 implements Builder {

	private Product product=new Product();
	@Override
	public void BuildPartA() {
		product.Add("部件X");
	}

	@Override
	public void BuildPartB() {
		product.Add("部件Y");
	}

	@Override
	public Product GetResult() {

		return product;
	}

	

}

package 建造者模式;

public class Main {
	public static void main(String[] args) {
		Director director=new Director();
		Builder b1=new ConcreteBuilder1();
		Builder b2=new ConcreteBuilder2();
		
		director.Construct(b1);
		director.Construct(b2);
		Product p1=b1.GetResult();
		p1.Show();
		
		Product p2=b2.GetResult();
		p2.Show();
		
	}
}
  从用户角度看(即main方法的调用过程),不关心product的具体生产过程,只需要一个建造模型(builder)以及一个指挥官(director)而指挥官全权控制product的生产过程。即需要生产添加的部件(如:builderA(),builderB)而具体的建造者类中的product对象相当于一个加工前的产品而getResult方法相当于加工后的产品。

               其就像通过一个builder的标准,在director的指挥下,构建出来的一个product的对象。将具体product的复杂生产过程与调用者分开。实现了建造过程的封装。








你可能感兴趣的:(设计模式,建造者模式,java,设计模式)