码迷,mamicode.com
首页 > 其他好文 > 详细

构建器模式

时间:2017-06-08 23:50:18      阅读:378      评论:0      收藏:0      [点我收藏+]

标签:rri   ext   logs   []   private   定义   struct   this   build   

 *构建器模式:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。类图如下:

技术分享

 *product产品类:表示被构建器构建的复杂对象,包含多个部件。

1 //产品接口 示意性产品,所以没有任何方法
2 public interface Product{    
3 }

 *builder构建器接口:定义创建一个product对象所需要的各个部件的操作。

1 //生成器接口
2 public interface Builder{
3     public void builderPart1();
4     public void builderPart2();
5     public Product getResult();
6 }

*concretebuilder具体的构建器:实现各个部件的创建,并负责组装product对象的各个部件,同时还提供一个让用户获取组装完成后的产品对象的方法。**具体的构建部件方法要由此角色来实现。

 1 //具体构建器
 2 public class ConcreteBuilder implements Builder{
 3     private Product resultProduct = new Product(){};//示意性产品这里用匿名对象表示
 4     @Override
 5     public Product getResult(){
 6         return resultProduct;
 7     }
 8     @Override
 9     public void builderPart1() {
10         //构建部件1具体方法
11     }    
12     @Override
13     public void builderPart2() {
14         //构建部件2具体方法
15     }    
16 }

 *director指导者:主要来使用builder接口,以一个统一的过程来构建所需要的product对象。**构建算法要由此角色来实现。

 1 //指导者
 2 public class Director{
 3     private Builder builder;
 4     //注入构建器对象
 5     public Director(Builder builder){
 6         this.builder = builder;
 7     }
 8     //指导构建器构建产品,这里实现构建步骤的算法(本例是按part1、part2顺序,实际场景中会复杂得多)
 9     public void construct(){
10         builder.builderPart1();
11         builder.builderPart2();
12     }
13     public Product getProduct(){
14         return builder.getResult();
15     }
16 }

客户端代码:

1 public class Client {
2     public static void main(String[] args) {
3         Builder builder = new ConcreteBuilder();
4         Director director = new Director(builder);
5         director.construct();
6         Product product = director.getProduct();
7     }
8 }

总结:

  构建器模式的本质就是分离整体构建算法和部件构造,使产品构建过程与具体产品表现松耦合。
    构建器模式主要功能是构建复杂产品,而且是细化的、分步骤的构建产品。这个构建过程是统一的、固定不变的,它把变化的过程放到了具体构建器里,只要实现不同的生成器,相同的构建过程就可以构建出的不同的产品。

构建器模式

标签:rri   ext   logs   []   private   定义   struct   this   build   

原文地址:http://www.cnblogs.com/ergou/p/6965010.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!