设计模式-builder(构造器模式)

来源:互联网 发布:c语言定义函数并调用 编辑:程序博客网 时间:2024/04/28 06:13

设计模式-builder(构造器模式)

Bilder模式定义:

        将一个复杂对象的构建和表示分离,是同样的创建构建过程可以创造不同的表示。
 
     Builder模式是一步一步创建一个复杂的对象,它允许用户可以只通过指定复杂对象的类型和内容就可以构建它们。用用不知道内部的具体构建细节。Builder模式是非常类似抽象工厂模式,细微的区别大概只是在反复使用中才能体会到。

为何使用建造者模式

     是为了将复杂对象的构建过程与它的部件分离。注意: 是解耦过程和部件。


    因为一个复杂的对象,不但有很多大量组成部分。例如汽车,有很多部件:车轮、方向盘、发动机,还有各种小零件等等,部件很多,但远不止这些,如何将这些部件装配成一辆汽车,这个装配过程也很复杂(需要很好的组装技术),Builder模式就是为了将部件和组装过程分开。

建造者模式典型结构图





如何使用建造者模式

     首先假设一个复杂对象是由多个部件组成的,Builder模式是吧复杂对象的创建和部件的创建分开来,分别用Director和Builder类来表示。


如果需要一个接口来创建部件:

[java] view plaincopy
  1. package com.designpatten.builder;  
  2.   
  3.   
  4. public interface Builder {  
  5.     void buildCarWheel() ;  
  6.     void buildSteeringWheel() ;  
  7.     void buildEngine() ;  
  8.     void buildCarFrame() ;  
  9.     Car getCar() ;  
  10. }  

在Director中构建复杂对象,将Builder中定义的一个一个部件组装起来。

[java] view plaincopy
  1. package com.designpatten.builder;  
  2.   
  3. public class Director {  
  4.   
  5.     private Builder builder ;  
  6.       
  7.     public Director(Builder builder){  
  8.         this.builder = builder ;  
  9.     }  
  10.       
  11.     public void getCarTogether(){  
  12.         builder.buildCarFrame() ;  
  13.         builder.buildEngine();  
  14.         builder.buildCarWheel() ;  
  15.         builder.buildSteeringWheel() ;  
  16.     }  
  17.       
  18. }  
实现具体的Builder:
  • 通过实现接口,来完成部件的构建过程
  • 重新获得目标对象接口
[java] view plaincopy
  1. package com.designpatten.builder;  
  2.   
  3. public class BenzBuilder implements Builder {  
  4.   
  5.     private Benz benz ;  
  6.       
  7.     public BenzBuilder(){  
  8.         benz = new Benz() ;  
  9.     }  
  10.       
  11.     @Override  
  12.     public void buildCarWheel() {  
  13.         System.out.println("Benz add Wheel");  
  14.     }  
  15.   
  16.     @Override  
  17.     public void buildSteeringWheel() {  
  18.         System.out.println("Benz add SteeringWheel");  
  19.     }  
  20.   
  21.     @Override  
  22.     public void buildEngine() {  
  23.         System.out.println("Benz add engine");  
  24.     }  
  25.   
  26.     @Override  
  27.     public void buildCarFrame() {  
  28.         System.out.println("Benz add frame");  
  29.     }  
  30.   
  31.     @Override  
  32.     public Car getCar() {  
  33.         return benz;  
  34.     }  
  35.   
  36. }  
[java] view plaincopy
  1. package com.designpatten.builder;  
  2.   
  3.   
  4. public class BMWBuilder implements Builder {  
  5.   
  6.   
  7.     private BMW bmw ;   
  8.       
  9.     public BMWBuilder(){  
  10.         bmw = new BMW() ;  
  11.     }  
  12.       
  13.     @Override  
  14.     public void buildCarWheel() {  
  15.         System.out.println("BMW add CarWheel");  
  16.     }  
  17.   
  18.   
  19.     @Override  
  20.     public void buildSteeringWheel() {  
  21.         System.out.println("BMW add SteeringWheel");  
  22.     }  
  23.   
  24.   
  25.     @Override  
  26.     public void buildEngine() {  
  27.         System.out.println("BMW add Engine");  
  28.     }  
  29.   
  30.   
  31.     @Override  
  32.     public void buildCarFrame() {  
  33.         System.out.println("BMW add Frame");  
  34.     }  
  35.   
  36.   
  37.     @Override  
  38.     public Car getCar() {  
  39.         return bmw;  
  40.     }  
  41.   
  42.   
  43. }  
具体的产品信息

[java] view plaincopy
  1. package com.designpatten.builder;  
  2.   
  3. public interface Car {  
  4.       
  5.     void run() ;  
  6.       
  7. }  

[java] view plaincopy
  1. package com.designpatten.builder;  
  2.   
  3. public class BMW implements Car {  
  4.   
  5.     @Override  
  6.     public void run() {  
  7.         System.out.println("BMW ---> run()");  
  8.     }  
  9.   
  10. }  
[java] view plaincopy
  1. package com.designpatten.builder;  
  2.   
  3. public class Benz implements Car {  
  4.   
  5.     @Override  
  6.     public void run() {  
  7.         System.out.println("Benz -------> run()");  
  8.     }  
  9.   
  10. }  
生产Car

[java] view plaincopy
  1. package com.designpatten.builder;  
  2.   
  3. public class Client {  
  4.     public static void main(String[] args) {  
  5.         BenzBuilder benzBuilder = new BenzBuilder() ;  
  6.         BMWBuilder bmwBuilder = new BMWBuilder() ;  
  7.           
  8.         Director benzDirector = new Director(benzBuilder) ;  
  9.         benzDirector.getCarTogether() ;  
  10.         Car benz = benzBuilder.getCar() ;  
  11.         benz.run() ;  
  12.         System.out.println("----------------------------");  
  13.         Director bmwDirector = new Director(bmwBuilder) ;  
  14.         bmwDirector.getCarTogether() ;  
  15.         Car bmw = bmwBuilder.getCar() ;  
  16.         bmw.run() ;  
  17.     }  
  18. }  

输出结构

[java] view plaincopy
  1. Benz add frame  
  2. Benz add engine  
  3. Benz add Wheel  
  4. Benz add SteeringWheel  
  5. Benz -------> run()  
  6. ----------------------------  
  7. BMW add Frame  
  8. BMW add Engine  
  9. BMW add CarWheel  
  10. BMW add SteeringWheel  
  11. BMW ---> run()  


参考:http://www.weixueyuan.net/view/6110.html

0 0
原创粉丝点击