zoukankan      html  css  js  c++  java
  • 建造模式

        建造模式将一个产品的内部表象与产品的生成过程分割开来,从而使一个建造过程可以生成具有不同内部表象的产品对象。

       1> 一个对象的某些属性必须按照某些顺序赋值才有意义,对象的某些属性必须赋值才能使用;

       2> 对象由多个零件构成,而零件的构造过程又较为复杂,这时建造模式就很适用。

        

        上面的类图中还需要加上一个Client,由Client生成不同的ConcratedBuilder并调用Director,在Director中使用不同的ConcratedBuilder生成具体的产品。

    public Class Client{
        public void buildProduct(){
             Director director = new Director();
             
             Builder builder1 = new ConcratedBuilder1();
             Product p1 = director.construct(builder1);
    
             Builder builder2 = new ConcratedBuilder2();
             Product p1 = director.construct(builder2);
        }
    }
    

      

         public class Director {

               public Product construct(Builder builder){

                     builder.buildPart1();
                     builder.buildPart2();
                     builder.retrieveProduct();
              }
    }

      Director不知道调用哪个ConcreteBuilder生成对象,是由client调用construct方法传入ConcreteBuilder的。

    public interface Builder {
    	public abstract Object buildPart1();
    	public abstract Object buildPart2();
    	public abstract Product retrieveProduct();	
    }
    

      

        public class ConcreteBuilder1 implements Builder {
             private Object part1,part2;
             @Override
             public Object buildPart1() {
                   part1 = new Object();
                   return part1;
             }

             @Override
             public Object buildPart2() {
                  part2 = new Object();
                  return part2;
             }

             @Override
             public Product retrieveProduct() {
                  Product1 p = new Product1();
                  return p;
             }
    }

      

    public interface Product {
    	public abstract void function();
    }
    

      

    public class Product1 implements Product {
    	
    	@Override
    	public void function() {
    	}
    }
    

       上面的类之间调用关系的流程图如下所示:

     

          只有1个具体的builder和product时,上面的建造模式可以简化如下:

         

          Builder兼任了Director和Builder双重的作用,直接生成具体的产品。

          

    public class Builder {
             private Object part1,part2;
             public Object buildPart1() {
                   part1 = new Object();
                   return part1;
             }
    
             public Object buildPart2() {
                  part2 = new Object();
                  return part2;
             }
    
             public Product retrieveProduct() {	
                  Product1 p = new Product1();
                  return p;
             }

    public Product construct(Builder builder){
                 builder.buildPart1();                
                 builder.buildPart2();                 
                 builder.retrieveProduct();             

                 }

    }
    

      上面的简化了的建造模式还适用于女娲造人,类图如下:

      

          发送邮件也可以使用建造模式来实现,类图如下:

          

         建造模式与抽象工厂模式的区别:

               抽象工厂模式每次都直接生成一个完整的对象,而建造模式生成对象是一步步的,最后返回给客户端的是一个复杂的完整的对象。

         建造模式与策略模式的区别:

               建造模式的多个具体builder虽然拥有相同的接口,但是所创造的出的对象可能完全不同,只是最后返回的具体对象的一部分。策略模式        是为算法提供抽象的接口。不同的具体策略对象为一般性的服务提供不同的实现。

          

  • 相关阅读:
    理解ORM的前提:数据库中的范式和约束
    C#复习笔记(4)--C#3:革新写代码的方式(查询表达式和LINQ to object(下))
    设置或者得到CheckBoxList选中了的值
    Gridview中Datakeys 通过主键取得各列的值。
    如何直接在网页中显示PDF文件
    C#日期格式化
    asp.net 基础知识
    WebServers 异步
    asp.net中异步调用webservice
    C#中哈希表(HashTable)的用法详解
  • 原文地址:https://www.cnblogs.com/lnlvinso/p/3807115.html
Copyright © 2011-2022 走看看