建造者模式学习以及与工厂模式的区别

http://hejiawangjava.iteye.com/blog/2238889


建造者模式学习以及与工厂模式的区别

博客分类:  DesignPattern
建造者模式 工厂模式 区别 

设计模式之禅学习——建造者模式

 

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

 

二、建造者模式与工厂模式的区别:

             工厂模式一般都是创建一个产品,注重的是把这个产品创建出来就行,只要创建出来,不关心这个          产品的组成部分。从代码上看,工厂模式就是一个方法,用这个方法就能生产出产品。

             建造者模式也是创建一个产品,但是不仅要把这个产品创建出来,还要关系这个产品的组成细节,          组成过程。从代码上看,建造者模式在建造产品时,这个产品有很多方法,建造者模式会根据这些相同          方法但是不同执行顺序建造出不同组成细节的产品。

            可以比较两个模式的example代码,一比较就会比较出来,工厂模式关心整体,建造者模式关心细节。

 

三、建造者模式代码

 

1、建造者模式用于建造产品,其产品类一般都是一个模板(模板设计模式),所以一定会有产品类:

Java代码  
  1. package com.wang.builderPattern;  
  2.   
  3. /** 
  4.  * 产品类,通常实现了模板方法设计模式 
  5.  * @author HeJW 
  6.  * 
  7.  */  
  8. public class Product {  
  9.       
  10.     //独立业务处理,一般会有多个业务方法,  
  11.     //根据这些方法不同实现细节,  
  12.     //体现出建造者模式的用处  
  13.     public void doSomething(){  
  14.         System.out.println("");  
  15.     }  
  16.       
  17. }     

 

2、抽象建造者,这个建造者会定义产品的不同部分以及其他产品定义的细节问题,然后根据这些细节建造产品:

Java代码  
  1. package com.wang.builderPattern;  
  2.   
  3. /** 
  4.  * 抽象建造者 
  5.  * @author HeJW 
  6.  * 
  7.  */  
  8. public abstract class Builder {  
  9.   
  10.     //设置产品的不同部分,以获得不同产品  
  11.     public abstract void setPart();  
  12.       
  13.     //建造产品  
  14.     public abstract Product builderProduct();  
  15.       
  16. }  

 

3、具体的建造者,在具体的建造者中,一定会有一个产品的对象,通过对这个产品对象的组成部分定义,建造出具体不同细节的产品:

Java代码  
  1. package com.wang.builderPattern;  
  2.   
  3. /** 
  4.  * 具体建造者 
  5.  * @author HeJW 
  6.  * 
  7.  */  
  8. public class ConcerteProduct extends Builder {  
  9.   
  10.     private Product product = new Product();  
  11.       
  12.     //设置产品零件  
  13.     @Override  
  14.     public void setPart() {  
  15.         /** 
  16.          * 产品类内的逻辑处理 
  17.          */  
  18.     }  
  19.   
  20.     @Override  
  21.     public Product builderProduct() {  
  22.         return product;  
  23.     }  
  24.   
  25. }  

 

4、导演类,这个类就是建造出可能出现的、具有不同细节的产品的建造者的集合,只要在客户端有导演类的实例,并且告诉导演类我要什么样的产品,导演类就会返回这个产品:

Java代码  
  1. package com.wang.builderPattern;  
  2.   
  3. /** 
  4.  * 导演类 
  5.  * @author HeJW 
  6.  * 
  7.  */  
  8. public class Director {  
  9.   
  10.     private Builder builder = new ConcerteProduct();  
  11.       
  12.     //构造不同的产品  
  13.     public Product getProduct(){  
  14.         /* 
  15.          * 设置不同的零件,产生不同的产品 
  16.          */  
  17.         builder.setPart();  
  18.         return builder.builderProduct();  
  19.     }  
  20.       
  21. }  

 

在客户端建造产品时:

Java代码  
  1. package com.wang.builderPattern;  
  2.   
  3. public class App {  
  4.       
  5.     public static void main(String[] args) {  
  6.           
  7.         Director productDirector = new Director();  
  8.         Product p = productDirector.getProduct();  
  9.         //...  
  10.     }  
  11.       
  12. }  

 

最后,只要记住,建造者模式是 适合建造具体细节的产品的设计模式就可以了。。。。。。

附上设计模式之禅这本书的建造者模式的实例代码(是以建造car为例的)


你可能感兴趣的:(java)