zoukankan      html  css  js  c++  java
  • 大话设计模式之建造者模式

    版权声明:本文为博主原创文章,未经博主同意不得转载。 https://blog.csdn.net/u010850027/article/details/24629581
            盘古开辟了天地。用身躯造出日月星辰、山川草木。那残留在天地间的浊气慢慢化作虫鱼鸟兽,为这寂静的世界增添了生气。这时,有一位女神女娲,在这莽莽的原野上行走。

    她放眼四望。山岭起伏,江河奔流,丛林茂密,草木争辉,天上百鸟飞鸣,地上群兽奔驰,水中鱼儿嬉戏,草中虫之豸跳跃,这世界按说也点缀得相当漂亮了。可是她总认为有一种说不出的寂寞。越看越烦,孤寂感越来越强烈,连自己也弄不清楚这是为什么。与山川草木诉说心中的烦躁,山川草木根本不懂她的话;对虫鱼鸟兽倾吐心事,虫鱼鸟兽哪能了解她的苦恼。


            她颓然坐在一个池塘旁边,茫然对池塘中自己的影子。

    忽然一片树叶飘落池中,精巧的池水泛起了小小的涟漪,使她的影子也微微晃动起来。

    她突然认为心头的结解开了,是呀!为什么她会有那种说不出的孤寂感?原来是世界是缺少一种像她一样的生物。想到这儿,她立即用手在池边挖了些泥土。和上水。照着自己的影子捏了起来。捏着捏着,捏成了一个小小的东西,模样与女娲几乎相同,也有五官七窍,双手两脚。捏好后往地上一放。竟然活了起来。

    女娲一见,满心欢喜,接着又捏了很多。

    她把这些小东西叫作“人”。

    今天我们的大话设计就从女娲抟土造人的故事開始说起,女娲要建造一个人,那首先要造头,身体。胳膊和腿,这就关乎到一个制造工序的问题,不知道读者有没有这种感觉,建造者模式和project模式非常接近,可是建造者模式提供了一个更加细粒度的对象的建造过程。我们先来看一下。建造者模式的结构图:

            

            依旧以我们上述的女娲抟土造人为例,看看我们的代码,首先,女娲要先创建一个须要建造的对象。例如以下:

             

    //要构造的对象
    public class Robust 
    {
    	String head;
    	String body;
            String arm;
            String leg;
    	public String getHead() 
            {
    		return head;
    	}
    	public void setHead(String head) 
            {
    
    		this.head = head;
    	}
    	public String getBody()
            {
    		return body;
    	}
    	public void setBody(String body)
            {
    		this.body = body;
    	}
            public String getArm()
            {
    		return arm;
    	}
    	public void setarm(String arm)
            {
    		this.arm = arm;
    	}
            public String getLeg()
            {
    		return leg;
    	}
    	public void setLeg(String leg)
            {
    		this.leg = leg;
    	}
    }
              然后有一个构造者的接口,当中包含了建造者会使用的建造过程

              

    public interface Builder 
    {
    
    	public void buidBody(String body);
    	public void buidHead(String head);
            public void buidArm(String arm);
            public void buidLeg(String leg);
    	public Robust getRobust();
    }
    public class RobustBuilder implements Builder 
    {
    
    	Robust robust = new Robust();
            public void buidBody(String body) 
            {
    	   robust.setBody(body);
    	}
    
    	public void buidHead(String head)
            {
               robust.setHead(head);
    	}
            public void buidArm(String arm)
            {
               robust.setArm(arm);
    	}
            public void buidLeg(String leg)
            {
               robust.setLeg(leg);
    	}
    
            public Robust getRobust() 
            {
               return robust;
    	}
    }
              有了建造者之后。须要有一个指挥家来指示建造的过程:

               

    //指挥建造的类
    
    public class Director
     {
    
          public Robust Construct(Builder builder)
          {
    	 builder.buidBody(null);
    	 builder.buidHead(null);
             builder.buidArm(null);
             builder.buidLeg(null);
    	 return builder.getRobust();
           }
    }
            这样,女王抟土造人的过程就完毕了,从代码角度来说。 假设我们希望分离复杂类型构建规则和类型内部组成。或者希望把同样的构建过程用于构建不同类型的时候能够考虑使用建造者模式。从应用角度来说, 假设我们希望解耦产品的创建过程和产品的详细配件,或者我们希望为全部产品的创建复用一套稳定而且复杂的逻辑的时候能够考虑使用建造者模式。

    设计之旅,未完待续......

查看全文
  • 相关阅读:
    多种方式实现数组的扁平化处理
    利用node中的内置模块fs实现对简单文件的读取 拷贝 创建等功能
    浅谈es5和es6中的继承
    js之冒泡排序与快速排序
    IE5,IE6,IE7,IE8的css兼容性列表[转自MSDN]
    css3 动画
    各种浏览器css hack
    解决li在ie,firefox中行高不一致问题
    Css:背景色透明,内容不透明之终极方法!兼容所有浏览器
    png-24在ie6中的几种透明方法
  • 原文地址:https://www.cnblogs.com/ldxsuanfa/p/10925004.html
  • Copyright © 2011-2022 走看看