建造者模式(java实现)

来源:互联网 发布:淘宝代理充值怎么做 编辑:程序博客网 时间:2024/05/18 06:03

建造者模式(生成器模式)(10)

建造者模式:将一个复杂对象的构建(指挥者类)和它的表示(测试类)相分离,使得同样的构建过程可以创建不同的表示.

如果我们使用了建造者模式,那么用户只需指定需要建造的类型(具体建造者类的引用,或者其向上转型后的引用)就可以得到它们,而具体的建造过程和细节就不用知道了.

//产品类, 由多个部件组成

public class Product {

private ArrayList<String>parts=new ArrayList<String>();

public void add(String part) {

parts.add(part);

}

public void show() {

System.out.print("展示建造产品所需部件:\n");

for (String part :parts) {

System.out.println(part);

}

}

}

//确定产品由两个部件组成,并声明一个得到产品建造结果的方法

public abstract class Build {

public abstract void buildPartA();

public abstract void buildPartB();

public abstract Product getResult();

}

public class ConcreteBuild1 extends Build{

private Product product=new Product();

//建造具体的部件A

public void buildPartA() {

product.add("PartA");

}

//建造具体的部件B

public void buildPartB() {

product.add("PartB");

}

public Product getResult() {

return product;

}

}

public class ConcreteBuild2 extends Build{

private Product product=new Product();

//建造具体的部件A

public void buildPartA() {

product.add("PartA");

}

//建造具体的部件B

public void buildPartB() {

product.add("PartB");

}

public Product getResult() {

return product;

}

}

//指挥建造过程

public class Director {

public Director(Build build) {

build.buildPartA();

build.buildPartB();

}

}

public class Demo {

public static void main(String[]args) {

Build build1=new ConcreteBuild1();

//Director封装了具体的建造过程

Director director=new Director(build1);

Product product1 =build1.getResult();

product1.show();

Build build2 =new ConcreteBuild2();

Director director2 =new Director(build2);

Product product2 =build2.getResult();

product2.show();

}

}

如果需要细化一些,比如加上产品的PartC,PartD,怎么办呢?这就需要权衡,如果这些细节是每个产品都需要构建的,就需要加进去,反之,没有必要.其实建造者模式是逐步构建产品的,所以建造者Builder类中的方法必须要足够普遍,以便为各种类型的具体建造者构造.

什么时候需要使用建造者模式呢?

它主要用于创建一些复杂的对象,这些对象内部构建间的建造顺序是稳定的,但是对象内部的构建通常面临着复杂的变化

建造者模式的好处?

使得建造代码和表示代码分离,由于建造者隐藏了该产品是如何组装的,所以如果需要改变一个产品的内部表示,只需要再定义一个具体的建造者就可以了.

原创粉丝点击