博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
建造模式
阅读量:7026 次
发布时间:2019-06-28

本文共 2403 字,大约阅读时间需要 8 分钟。

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

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

      

转载于:https://www.cnblogs.com/lnlvinso/p/3807115.html

你可能感兴趣的文章
centos 分区扩容
查看>>
JBoss EAP 6 monitoring using remoting-jmx and Zabbix
查看>>
邮件服务器
查看>>
OOAD-设计模式-原型模式
查看>>
Java FAQ(2)
查看>>
JavaScript常用事件总结
查看>>
squid在企业网中的应用
查看>>
主元素 Majority Element
查看>>
关于加密的一些笔记
查看>>
MySQL并发处理
查看>>
android Bitmap的内存优化
查看>>
我的友情链接
查看>>
mysql主从备份
查看>>
高并发Web服务的演变—节约系统内存和CPU
查看>>
MyBatis的Batch处理导致秒杀系统超卖的问题
查看>>
远程备份电脑 —— 方案二:不需要使用.bat批运行文件
查看>>
解决Redhat Linux5 yum出现This system is not registered with RHN的方法
查看>>
10.23 linux任务计划cron 10.24 chkconfig工具 10.25 systemd管理服务 10.26 unit介绍 10.27 target介绍...
查看>>
2015/01/26PP租车面试总结
查看>>
荷露叮咚wp建站系列视频课程1.WordPress基本介绍
查看>>