(十五)建造者模式详解(都市异能版)

发布时间:2013-08-16 23:47:00作者:左潇龙阅读(364 )评论(4)

                    作者:zuoxiaolong8810(左潇龙),转载请注明出处,特别说明:本博文来自博主原博客,为保证新博客中博文的完整性,特复制到此留存,如需转载请注明新博客地址即可。

                    傍晚,魔都某天桥。

                    “嗯?你认识我吗?”韩雨露疑惑的看着眼前的男子,轻声的问道。

                    “额...”被对方这么突然一问, 小左顿时有些语塞,一时之间竟然忘记了回答对方的问题。

                    “怎么了?我们认识吗?”看到对方支支吾吾的样子,韩雨露不禁疑惑更甚,再次追问道。      

                    再次被对方追问,小左这才意识到自己刚才的表现有些失态,随即便轻咳一声,故作淡定的解释道:“不好意思,刚才有些失礼了,让您见笑了,不过我想我们应该不认识。”

                    “喔...是吗?”听到答案之后,韩雨露不禁有些失望,隐隐之中,她始终觉得面前之人似曾相识,不然一向不迷信的她也不会突然想起算命,但接触到现在,她却仍是想不起来二人曾经在哪里见过。

                    此时,小左已经确认了眼前之人,正是那一晚开车撞死自己的女子。刚才初见此女子,小左就觉得十分眼熟,之后凭借着读心术特有的能力,小左更是看到了对方心中那零零碎碎的片段,故而现在已然十分确定心中的答案。

                    不过看到对方将信将疑的表情,想必应该是联想到了什么,想到此,小左不禁感叹女人的直觉实在是逆天。在对方的心中,自己应该是已经死了的,而且如今自己的面貌已经发生了翻天覆地的变化,没想到对方还是能隐隐的感觉到什么,这如何能不让小左感到震惊。

                    “对了,你刚才不是说想算命吗?”心中震惊的同时,小左还是巧妙的转移了话题。

                    “是的,不过看你好像要收摊了,不知道会不会打扰到你...”韩雨露轻轻的点了点头,客气的说道。

                    “没事,相遇便是缘分,我们算命的最相信的便是天意,既然老天让我们相遇,就顺从天意吧。只是不知道你想算哪方面的呢?”

                    “这个我也不知道,就请你看着算吧。”算命本就不是韩雨露的本意,所以她就索性将主动权交给了对方。

                    “这个...你等下...我算算...”说完以后,小左双目紧闭,一副思索的表情,看起来还真像个算命的先生,不久一会,小左缓缓的睁开双眼,神色平静的说道:“你是不是心中有一些事无法释怀?”

                    听到小左的推测,韩雨露并没有答话,而是震惊了片刻之后,继续凝神望着小左等待后话。

                    “有些事不能跟你说的太直白,否则就违背了天意,但是我可以告诉你的是,你所无法释怀的事,其实在你这内疚的一年已经消失了。”小左面无表情的说着,刻意的停顿了一下之后,小左继续说道:“或者说...让你心怀愧疚的人,其实已经早就不怪你了。”

                    韩雨露一直死死的望着小左,而听到小左说出最后一句话的时候,柔软的娇躯不禁一颤。不知为何,韩雨露总觉得眼前之人所说的话是真的,不过尽管如此,韩雨露还是心存顾虑的问道:“你说的是真的吗?”

                    “当然是真的,一切皆为天意。小姐尽可相信。”微微的点了点头,小左悠悠的说道。

                    “谢谢你。我叫韩雨露,我还会再来的。”韩雨露迷人的一笑之后,随手便扔给小左一沓钱,转眼就消失在人群之中。

                    然而我们的小左,此时正在回味刚才美好的一幕,愣愣的呆在那里一动不动,嘴上耷拉的哈喇子清晰可见,以至于手中厚厚的钞票都没有注意到,口中还模糊不清的说着:“太美了,实在太TM美了..."


                    自那一次之后,韩雨露便隔三差五的会光顾小左的生意,而且每次都出手阔绰,弄的小左十分不好意思。小左也多次尝试过把钱还给对方,但无一例外,每一次小左都被韩雨露撅起的小嘴给秒杀了。说到底,屌丝在女神的面前,抵抗力还是太弱了点。

                    多次尝试无果之后,小左渐渐的也就不再做作,从韩雨露的出手就能看出其家境肯定不凡,而小左之前可是一个名符其实的屌丝与贫困户。再者说,虽然自己幸运的获得重生并且还无意间拥有了异能,但说起来也是九死一生,如果不是看在对方在出事之后的表现,恐怕小左此时早已做出了过激的行为。

                    如此平淡无奇的生活过了几个月,小左也渐渐习惯了每隔几日的相聚。韩雨露本身就生的一幅可爱模样,再加之心中的顾虑逐渐消除,故而韩雨露已经渐渐的会经常露出甜甜的微笑,这着实让小左的魔都之旅增加了不少光彩。

                    不过好景不长,几个月后的某一天,韩雨露却突然神奇的消失了,这让已经习惯了每隔几天就能见到韩雨露的小左十分不适应,一时之间心神不宁,而且隐隐约约之中,小左觉得韩雨露一定是出了什么事。

                    可惜小左此时也无可奈何,唯一能做的只有等待,伴随着时间一天一天的过去,小左不禁有些后悔,当初没有使用隐身跟着韩雨露,看看她到底住在何处,如此一来,现在也不会束手无策了。

                    

                    转眼之间,已然又过去了数月,而韩雨露却仍然迟迟不见踪影,小左心中也越来越着急,而小左能做的,也只有每日按时摆摊子,期待韩雨露能尽快出现。

                    “卖报啦,卖报啦,韩氏集团独女入狱,引起数千民众围堵警察局。”一道稚嫩的叫卖声在天桥响起。

                    “小弟弟,报纸多少钱,给我一份。”说话的正是小左,当听到韩氏集团独女的时候,小左一个箭步便出现在卖报小童跟前,急切的说道。

                    “哥哥,一块钱一份。”卖报小童高兴的说道。

                    “喏,给你,不用找了。”匆匆的扔给卖报小童一张毛爷爷之后,小左便回到原地迫不及待的打开了报纸。

                    看到报纸上头条新闻的图片,小左的双手不禁有些颤抖,心中暗暗想道:“没想到韩雨露还真是一个大家之女,好一个韩氏集团啊。”

                    忽然看到韩雨露的真实身份,小左不禁觉得有点失落,纵然自己现在容貌尽变,还拥有异能,但这依然没有弥补小左心中的落差。好一会之后,小左才渐渐的调整好心态,眼神望着前方,坚定的说道:“不管怎样,我也要先把她救出来!”


                    魔都某出租屋,深夜。

                    “到底要怎么样才能把她救出来,而且也不暴露我的身份呢?”小左坐在电脑前,抓着头发眉头紧皱的喃喃道。

                    “如果我暴露自己的身份与异能,倒是很简单,直接隐身进去把门打开,抓住韩雨露飞出去就行。不过这样实在有点太惊世骇俗了,这样一弄,我基本上应该没有安生日子了。”想到自己暴露以后要面临的处境,小左暗自摇了摇头。

                    苦思冥想了好大一会,小左暗暗的道:“看来要是想悄无声息的把她放出来,只能将整个看守所变成我的了。”想到这里,小左自己也不禁被自己震撼了一把。

                    为了不引起注意,小左思来想去,还是觉得将看守所的人全部偷梁换柱才是最好的方案,只有如此,才能确保万无一失。原本,小左是打算冒充看守所其中一人,直接将韩雨露放出来,不过这个主意很快就被小左否定了。这样一来,万一还有其他人稍微阻拦一下,或者向上级请示一下,就彻底暴露了。

                    除此之外,小左也想过别的办法,就是冒充上级直接去看守所下达命令,但是这样一来,小左就得去追查具有这个权利的人,这样难免会浪费不少时间,而且这个方法也有同样的风险,因为他也不确定看守所的人是否认识这些领导,到时候能不能顺利放人,也不得而知。

                    “看来今晚需要去看守所一趟了,我得先去探探情况,顺便看下这些人的样子。”说干就干,既然想到了办法,小左也便不再犹豫,当即就甩门而去。

                    手机开着导航功能,凭借着飞行和隐身的异能,小左只用了不到一个小时,便摸清了看守所的底细。凭借着灵魂体,小左还专门去牢房确认了一下韩雨露的下落,不过当看到韩雨露的时候,小左着实吃了一惊。

                    不为其他,只是因为韩雨露的牢房里,不止干净的一尘不染,而且装饰的比小左的出租屋只好不差,最让小左震惊的是,牢房里竟然还放着一台电脑。这样的待遇,比起其余惨不忍睹的牢房,实在是不得不让人感叹钱的无上神力。

                    “尼玛,我为什么这么想去坐牢呢。”回到家中,之前的担心一扫而空,小左现在竟然只是一心想坐牢。不过说归说,那种暗无天日的生活,纵然是金碧辉煌,想必时间久了,人也会憋坏的吧。

                    

                    “既然有了看守所人的模样,想必我的灵魂应该可以分离出来相似的分身吧。”自从小左拥有异能,至今已经近两年了,这两年里,小左已经渐渐的彻底摸清了自己的能力。

                    小左发现自己的灵魂不仅可以分离出自己屌丝和高富帅的分身,也可以分离出其它模样的分身。只是相对于分离出与自己相似的分身,后者不应该说是分离,说是创造更加准确点,因为整个过程是要完全凭借小左的灵魂力去控制并创造的,所以制造起来非常费时费力,最重要的是,还没什么作用。所以刚开始发现时,小左还是挺兴奋的,但是新鲜感一过之后,他便发现,这个能力实在是个鸡肋。

                    略微尝试了一下,小左才发现制造一个全新的分身是多么困难。就在刚才,仅仅是制造一个分身的手,就花费了小左整整半个小时的时间。

                    “看来鸡肋技能也有用到的时候啊,真是后悔当初没有好好练习一下,照我现在的速度,恐怕连一个分身都还没制造完,天就亮了,还如何制造整个看守所人员的分身。”

                    沉吟了片刻,小左自言自语道:“现在是没有时间来练习了,短时间内,也只能依靠设计模式想想办法了。不过分析之前,还是先来看看我现在的状况吧。”

                    说着,小左便开始在电脑上敲起了代码,写的过程中,小左还时不时的摸着下巴沉思一会,然后再接着一阵噼里啪啦的敲打键盘。

                    “首先应该有一个分身的类,这个分身可跟以前不同了,由于不是我的灵魂直接分离的,所以其实它和灵魂已不再是继承关系,而且里面的属性也会很多,因为每一个部分我都要制造的。”

    package com.builder;
    //分身类
    public class Doppelganger {
        
        private String name;
    
        private String body;
        
        private String head;
        
        private String leftArm;
        
        private String leftHand;
        
        private String rightArm;
        
        private String rightHand;
        
        private String leftFoot;
        
        private String leftLeg;
        
        private String rightFoot;
        
        private String rightLeg;
        
        public Doppelganger(String name) {
            super();
            this.name = name;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getBody() {
            return body;
        }
    
        public void setBody(String body) {
            this.body = body;
        }
    
        public String getHead() {
            return head;
        }
    
        public void setHead(String head) {
            this.head = head;
        }
    
        public String getLeftArm() {
            return leftArm;
        }
    
        public void setLeftArm(String leftArm) {
            this.leftArm = leftArm;
        }
    
        public String getLeftHand() {
            return leftHand;
        }
    
        public void setLeftHand(String leftHand) {
            this.leftHand = leftHand;
        }
    
        public String getRightArm() {
            return rightArm;
        }
    
        public void setRightArm(String rightArm) {
            this.rightArm = rightArm;
        }
    
        public String getRightHand() {
            return rightHand;
        }
    
        public void setRightHand(String rightHand) {
            this.rightHand = rightHand;
        }
    
        public String getLeftFoot() {
            return leftFoot;
        }
    
        public void setLeftFoot(String leftFoot) {
            this.leftFoot = leftFoot;
        }
    
        public String getLeftLeg() {
            return leftLeg;
        }
    
        public void setLeftLeg(String leftLeg) {
            this.leftLeg = leftLeg;
        }
    
        public String getRightFoot() {
            return rightFoot;
        }
    
        public void setRightFoot(String rightFoot) {
            this.rightFoot = rightFoot;
        }
    
        public String getRightLeg() {
            return rightLeg;
        }
    
        public void setRightLeg(String rightLeg) {
            this.rightLeg = rightLeg;
        }
    
        public String toString() {
            return name;
        }
        
    }

                    “人要这么多部位干嘛,真是烦躁,下面应该是我的灵魂类了,它可以制造分身。”

    package com.builder;
    //灵魂类
    public class Soul {
        
        private Doppelganger doppelganger;
        
        public void createDoppelganger(String name){
            doppelganger = new Doppelganger(name);
        }
        
        public Doppelganger getDoppelganger(){
            try {
                return doppelganger; 
            }finally{
                doppelganger = null;
            }
        }
        
        public void createBody(String body) {
            System.out.println("设置" + doppelganger.getName() + "的" + body);
            doppelganger.setBody(body);
        }
    
        public void createHead(String head) {
            System.out.println("设置" + doppelganger.getName() + "的" + head);
            doppelganger.setHead(head);
        }
    
        public void createLeftArm(String leftArm) {
            System.out.println("设置" + doppelganger.getName() + "的" + leftArm);
            doppelganger.setLeftArm(leftArm);
        }
    
        public void createLeftHand(String leftHand) {
            System.out.println("设置" + doppelganger.getName() + "的" + leftHand);
            doppelganger.setLeftHand(leftHand);
        }
    
        public void createRightArm(String rightArm) {
            System.out.println("设置" + doppelganger.getName() + "的" + rightArm);
            doppelganger.setRightArm(rightArm);
        }
    
        public void createRightHand(String rightHand) {
            System.out.println("设置" + doppelganger.getName() + "的" + rightHand);
            doppelganger.setRightHand(rightHand);
        }
        
        public void createLeftLeg(String leftLeg) {
            System.out.println("设置" + doppelganger.getName() + "的" + leftLeg);
            doppelganger.setLeftLeg(leftLeg);
        }
    
        public void createLeftFoot(String leftFoot) {
            System.out.println("设置" + doppelganger.getName() + "的" + leftFoot);
            doppelganger.setLeftFoot(leftFoot);
        }
    
        public void createRightLeg(String rightLeg) {
            System.out.println("设置" + doppelganger.getName() + "的" + rightLeg);
            doppelganger.setRightLeg(rightLeg);
        }
    
        public void createRightFoot(String rightFoot) {
            System.out.println("设置" + doppelganger.getName() + "的" + rightFoot);
            doppelganger.setRightFoot(rightFoot);
        }
    
    }

                  “这下就可以开始制造了,我来试着制造两个分身吧,一个瘦小的,一个胖胖的。制造的过程应该是下面这样的。”

    package com.builder;
    //制造过程
    public class Creator {
    
        public static void main(String[] args) {
            Soul soul = new Soul();
            //制造一个瘦小的看守所的人员
            soul.createDoppelganger("看守所人员1");
            soul.createBody("瘦瘦的身体");
            soul.createHead("小小的头");
            soul.createLeftArm("瘦瘦的左胳膊");
            soul.createLeftHand("瘦瘦的左手");
            soul.createRightArm("瘦瘦的右胳膊");
            soul.createRightHand("瘦瘦的右手");
            soul.createLeftLeg("瘦瘦的左腿");
            soul.createLeftFoot("小小的左脚");
            soul.createRightLeg("瘦瘦的右腿");
            soul.createRightFoot("小小的右脚");
            System.out.println("获得了" + soul.getDoppelganger());
            
            System.out.println("----------------------------------------");
            
            //制造一个胖胖的看守所的人员
            soul.createDoppelganger("看守所人员2");
            soul.createBody("胖胖的身体");
            soul.createHead("大大的头");
            soul.createLeftArm("胖胖的左胳膊");
            soul.createLeftHand("胖胖的左手");
            soul.createRightArm("胖胖的右胳膊");
            soul.createRightHand("胖胖的右手");
            soul.createLeftLeg("胖胖的左腿");
            soul.createLeftFoot("大大的左脚");
            soul.createRightLeg("胖胖的右腿");
            soul.createRightFoot("大大的右脚");
            System.out.println("获得了" + soul.getDoppelganger());
        }
    }

     

                   “仅仅是制造了两个人,就费了这么大的事,现在这样果然不行啊。仅仅是制造了两个分身,就已经如此繁琐了,而且万一我不小心,再缺胳膊少腿的,这要到时候充当看守所人员的时候,被韩雨露看到,还不得吓个魂飞魄散的。”不过想到韩雨露惊恐无助的样子,小左竟然不自觉的露出了暗暗的坏笑。

                   “看来还得求助于设计模式啊,还是让我来搜搜吧,度娘,老爹来啦。”

                   说着,小左便开始在度娘上专注的寻找起来,忽的,小左猛地一拍大腿,“有了,就它了。建造者模式,这名字太贴切了,来看看它的定义吧,哈哈!”

                   定义:将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式。
                   “定义中说复杂的对象,不正是指的我的分身吗,那是相当复杂啊。看定义中的意思是,复用同样的构建过程,但是使用不同的表示。”说完小左露出一副思索的表情,随后缓缓的说道:“就我目前的情况来看,创建一个分身的过程就是构建过程,表示则应该指的是分身的形状了,比如瘦的,胖的。”

                   “不过这样还不够清晰,还是来看看建造者模式的类图吧。”


                   “建造者模式的类图并不复杂啊,不过看图中是有着四种角色,首先建造者接口(Builder)和具体的建造者(ConcreteBuilder)应该是要新建的,而指挥者(Director)毫无疑问就是我的灵魂了,产品(Product)则是分身。”

                   “哈哈,看着类图就是清晰了许多啊,分身类应该是不需要变的,不过作为指挥者的灵魂就要变一下了。现在还是先把建造者接口和具体的建造者写出来吧。”

    package com.builder;
    //分身制造者接口
    public interface DoppelgangerBuilder {
        
        public void createDoppelganger(String name);
    
        public void buildBody();
    
        public void buildHead();
    
        public void buildLeftArm();
    
        public void buildLeftHand();
    
        public void buildRightArm();
    
        public void buildRightHand();
        
        public void buildLeftLeg();
    
        public void buildLeftFoot();
    
        public void buildRightLeg();
    
        public void buildRightFoot();
        
        public Doppelganger getDoppelganger();
        
    }

                   “下面便是具体的建造者了,按照现在的情况,应该是两个具体的建造者,一个瘦的,一个胖的。”

    package com.builder;
    //瘦的分身的建造者
    public class ThinBuilder implements DoppelgangerBuilder{
    
        private Doppelganger doppelganger;
        
        public void createDoppelganger(String name){
            doppelganger = new Doppelganger(name);
        }
    
        public Doppelganger getDoppelganger(){
            try {
                return doppelganger; 
            }finally{
                doppelganger = null;
            }
        }
        
        public void buildBody() {
            System.out.println("设置" + doppelganger.getName() + "的瘦瘦的身体");
            doppelganger.setBody("瘦瘦的身体");
        }
    
        public void buildHead() {
            System.out.println("设置" + doppelganger.getName() + "的小小的头");
            doppelganger.setHead("小小的头");
        }
    
        public void buildLeftArm() {
            System.out.println("设置" + doppelganger.getName() + "的瘦瘦的左胳膊");
            doppelganger.setLeftArm("瘦瘦的左胳膊");
        }
    
        public void buildLeftHand() {
            System.out.println("设置" + doppelganger.getName() + "的瘦瘦的左手");
            doppelganger.setLeftHand("瘦瘦的左手");
        }
    
        public void buildRightArm() {
            System.out.println("设置" + doppelganger.getName() + "的瘦瘦的右胳膊");
            doppelganger.setRightArm("瘦瘦的右胳膊");
        }
    
        public void buildRightHand() {
            System.out.println("设置" + doppelganger.getName() + "的瘦瘦的右手");
            doppelganger.setRightHand("瘦瘦的右手");
        }
        
        public void buildLeftLeg() {
            System.out.println("设置" + doppelganger.getName() + "的瘦瘦的左腿");
            doppelganger.setLeftLeg("瘦瘦的左腿");
        }
    
        public void buildLeftFoot() {
            System.out.println("设置" + doppelganger.getName() + "的小小的左脚");
            doppelganger.setLeftFoot("小小的左脚");
        }
    
        public void buildRightLeg() {
            System.out.println("设置" + doppelganger.getName() + "的瘦瘦的右腿");
            doppelganger.setRightLeg("瘦瘦的右腿");
        }
    
        public void buildRightFoot() {
            System.out.println("设置" + doppelganger.getName() + "的小小的右脚");
            doppelganger.setRightFoot("小小的右脚");
        }
    
    
    }
    package com.builder;
    //胖的分身的建造者
    public class FatBuilder implements DoppelgangerBuilder{
    
        private Doppelganger doppelganger;
        
        public void createDoppelganger(String name){
            doppelganger = new Doppelganger(name);
        }
    
        public Doppelganger getDoppelganger(){
            try {
                return doppelganger; 
            }finally{
                doppelganger = null;
            }
        }
        
        public void buildBody() {
            System.out.println("设置" + doppelganger.getName() + "的胖胖的身体");
            doppelganger.setBody("胖胖的身体");
        }
    
        public void buildHead() {
            System.out.println("设置" + doppelganger.getName() + "的大大的头");
            doppelganger.setHead("大大的头");
        }
    
        public void buildLeftArm() {
            System.out.println("设置" + doppelganger.getName() + "的胖胖的左胳膊");
            doppelganger.setLeftArm("胖胖的左胳膊");
        }
    
        public void buildLeftHand() {
            System.out.println("设置" + doppelganger.getName() + "的胖胖的左手");
            doppelganger.setLeftHand("胖胖的左手");
        }
    
        public void buildRightArm() {
            System.out.println("设置" + doppelganger.getName() + "的胖胖的右胳膊");
            doppelganger.setRightArm("胖胖的右胳膊");
        }
    
        public void buildRightHand() {
            System.out.println("设置" + doppelganger.getName() + "的胖胖的右手");
            doppelganger.setRightHand("胖胖的右手");
        }
        
        public void buildLeftLeg() {
            System.out.println("设置" + doppelganger.getName() + "的胖胖的左腿");
            doppelganger.setLeftLeg("胖胖的左腿");
        }
    
        public void buildLeftFoot() {
            System.out.println("设置" + doppelganger.getName() + "的大大的左脚");
            doppelganger.setLeftFoot("大大的左脚");
        }
    
        public void buildRightLeg() {
            System.out.println("设置" + doppelganger.getName() + "的胖胖的右腿");
            doppelganger.setRightLeg("胖胖的右腿");
        }
    
        public void buildRightFoot() {
            System.out.println("设置" + doppelganger.getName() + "的大大的右脚");
            doppelganger.setRightFoot("大大的右脚");
        }
    
    
    }

                   “由于分身类不需要变化,下面就只剩一个指挥者了,也就是我的灵魂。”

    package com.builder;
    //灵魂类,指挥者
    public class Soul {
        
        public Doppelganger createDoppelganger(DoppelgangerBuilder doppelgangerBuilder,String name){
            doppelgangerBuilder.createDoppelganger(name);
            doppelgangerBuilder.buildBody();
            doppelgangerBuilder.buildHead();
            doppelgangerBuilder.buildLeftArm();
            doppelgangerBuilder.buildLeftHand();
            doppelgangerBuilder.buildRightArm();
            doppelgangerBuilder.buildRightHand();
            doppelgangerBuilder.buildLeftLeg();
            doppelgangerBuilder.buildLeftFoot();
            doppelgangerBuilder.buildRightLeg();
            doppelgangerBuilder.buildRightFoot();
            return doppelgangerBuilder.getDoppelganger();
        }
    
    }

                    “这下我的灵魂只管指挥就可以了,不过看样子,我是要牢牢记住分身建造的过程了,看来这指挥者果然不是好当的啊。下面让我看看制造分身的过程吧。”

    package com.builder;
    //制造过程
    public class Creator {
    
        public static void main(String[] args) {
            Soul soul = new Soul();
            //制造一个瘦小的看守所的人员
            System.out.println("获得了" + soul.createDoppelganger(new ThinBuilder(),"看守所人员1"));
            System.out.println("----------------------------------------");
            
            //制造一个胖胖的看守所的人员
            System.out.println("获得了" + soul.createDoppelganger(new FatBuilder(),"看守所人员2"));
        }
    }


                   “哈哈,这下明显快多了,不过两个具体的建造者有重复的代码,倒是可以抽出一个抽象的模板类去表示这些共性。不过现在还是先算了吧。”

     

                   “还是老样子,让我来对比下前后的利弊吧,这样好让我以后方便的造人。”

                   首先便是先前的坏处了,应该有以下两点。

                   1、制造分身的非常复杂,每次都要现场制造,容易丢三落四,缺胳膊少腿的。

                   2、分身的样子是可以变化的,所以假设我要重复制造几个瘦瘦的家伙的话,那就不得不每次都将整个建造过程和整个身体的部分全部重来一遍了。

                   如果换成专业点的语言来总结的话,则是下面两点。

                   1、对象的构建过程非常复杂,每次客户端调用的时候,都要自己控制构建过程,这会导致构建过程的重复,而且非常容易忘记某一个步骤。

                   2、对象的表示是可以变化的,所以如果要重复制造几个表示相同的对象的时候,只能每次都将过程和表示重复一遍。

                   那么现在改变了方式之后的好处则是下面两点。

                   1、分身制造的过程被灵魂专门记忆和控制,所以不会再出现丢三落四的情况。

                   2、由于分身的样子由固定的分身制造者提供,所以如果要重复制造相同样子的分身,只需要让灵魂控制过程再重来一次即可。

                   而好处的话,如果换成专业点的语言来总结的话,则是下面两点。
                   1、最主要的好处是,使得对象的构建与表示分离,可以让表示独立于过程而独立的变化,并且客户端不再需要关心具体的构建过程和表示。

                   2、由于固定的表示由具体的制造者提供,所以要重复制造几个表示相同的对象的时候,只需要让指挥者控制制造者再进行一次即可。

                   “看来这个建造者模式很适合我制造分身的情况啊,那么总结下它适用的场景吧。它适用的场景应该是这样的。”

                   1、当对象的构建过程十分复杂,需要与表示分离的时候。

                   2、当对象的表示有不同种类,需要加以区分的时候。
                   “最后还是让我看看现在的类图吧,哈哈。”解决了问题的小左此时心情大好,大笑着说道。


                    “看起来和建造者模式的类图倒是几乎一模一样,这下我得好好的练习一下建造者模式的方法了。”

                    说着,小左便将自己的高富帅和屌丝分身再次分离了出来,如今看来,分离这两个分身实在比制造分身要快多了。接下来,小左的灵魂便开始一门心思的记忆组装过程,而两个分身,则一个练习制造各种瘦分身的零件,另外一个练习制造各种胖分身的零件。


                    伴随着一魂两分身不停的练习,时间也是悄然而逝,转眼间,已是第二天深夜。

                    魔都某看守所。

                    “李刚,里面那小妞那么好看,你说我们俩大老爷们这么一直干看着,也太折磨人了吧。”

                    “你这死双江,做了人民警察还是改不了你那副德行,小心被头听到把你也送进去。”李刚听完忽的一拍李双江后脑壳,奸笑的说道。

                    “靠!你敢袭警,你小子才是想进局子了吧...”李双江笑骂的同时,右手顺便也在李刚的脑壳上拍了一记。

                    “你敢打我?咦?头好晕...”不停的摇着头,李刚的眼神开始渐渐迷离。

                    正当李双江准备表示自己不会上当时,只见李刚嘭的一声便直直的摔倒在地,而李双江刚到嘴边的话也咽了回去,战战兢兢的拍了拍李刚,然而李刚此时却毫无反应,李双江这下彻底吓尿了,颤颤巍巍的说道:“嘿...你吓我呢吧...死了?”

                    

     

     


    版权声明:本文版权归作者(左潇龙)所有,欢迎转载。但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

    0
    精彩
    0
    感动
    0
    搞笑
    0
    开心
    0
    愤怒
    0
    无聊
    0
    灌水
    0
    惊讶
#1楼     时间:2013-11-07 14:35:00      来源:Tony Zhao
楼主你太神了,当程序员真是屈才了。。
#2楼     时间:2016-10-11 16:59:00      来源:赫连勃勃大王
Doppelgenger和具体的Builder类之间的关系不是聚合吗,应该是实线+箭头
Soul类和DoppelgangerBuilder之间的关系是依赖啊,应该是虚线+箭头
看了半天怎么理解也是这样,是我错了吗,求楼主指点......坐等回复
#3楼     时间:2017-04-02 10:31:00      来源:麦浪无垠
@ 赫连勃勃大王
引用
Doppelgenger和具体的Builder类之间的关系不是聚合吗,应该是实线+箭头
Soul类和DoppelgangerBuilder之间的关系是依赖啊,应该是虚线+箭头
看了半天怎么理解也是这样,是我错了吗,求楼主指点......坐等回复

+1,求解答...
#4楼     时间:2018-04-03 20:01:00      来源:magicwff
@ 麦浪无垠
Doppelgenger和具体的Builder类之间的关系就是依赖啊,你看ThinBuilder中的Doppelgenger不是一个成员变量么,何来的聚合。且聚合的意思是,离开了Doppelgenger,ThinBuilder不能单独存在,显然不是。
Soul类和DoppelgangerBuilder之间的关系是组合,看Creator是不是使用了同一个Soul对象操作了多个DoppelgangerBuilder?想象一下Soul中写成一个List<DoppelgangerBuilder>。
发表评论

站内搜索

最新评论