大话设计模式-第13章 好菜每回味不同--建造者模式- 高飞网

第13章 好菜每回味不同--建造者模式

2016-02-02 11:34:55.0

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

构建某个对象的过程应该是稳定的。如构建一个邮件消息体,需要发送者接收者,需要标题与内容。这些缺一不可,比如缺少了接收者就不能正确发送邮件。而具体构造的细节是不同的,如标题可以是各式各样的。使用了建造者模式,那么用户就只需要指定需要建造的类型就可以得到它们,而具体的过程和细节不需要知道。  



下面是具体代码:


import java.util.*;
//产品类
public class Product{
        private List<String> parts = new ArrayList<String>();
       
        public void addPart(String part){
                this.parts.add(part);
        }      

        public void display(){
                for(String part:parts){
                        System.out.println(part);
                }
        }
}

//建造者
public interface Builder{
        public void buildA();
        public void buildB();
        public Product getProduct();

}

public class ConcreteBuilder1 implements Builder{
        private Product product = new Product();
        public void buildA(){
                product.addPart("部件A");
        }
        public void buildB(){
                product.addPart("部件B");
        }
        public Product getProduct(){
                return product;
        }      
}

public class ConcreteBuilder2 implements Builder{
        private Product product = new Product();
        public void buildA(){
                product.addPart("部件X");
        }  
        public void buildB(){
                product.addPart("部件Y");
        } 
        public Product getProduct(){
                return product;
        }      
}

//指挥者
public class Director{
   
    //指挥者使用某一个建造者构造一个产品
    public void direct(Builder builder){
        builder.buildA();
        builder.buildB();
    }  

}

public class App{
    public static void main(String[] args){
        //指挥者选b1作建造者
        Director d = new Director();//封装了建造过程
        //初始化两个建造者
        Builder b1 = new ConcreteBuilder1();
        Builder b2 = new ConcreteBuilder2();
   
        d.direct(b1);//使用b1来建造
        Product p = b1.getProduct();
        p.display();

        d.direct(b2);
        Product p2 = b2.getProduct();
        p2.display();

    }
}


应用

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

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

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