设为首页 加入收藏

TOP

建造者模式(Builder)
2014-11-23 18:58:09 来源: 作者: 【 】 浏览:12
Tags:建造 模式 Builder

建造者模式是将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。


模式结构

\


< http://www.2cto.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KPC9ibG9ja3F1b3RlPgo8L2Jsb2NrcXVvdGU+CjxwPiA8L3A+CjxoMj69qNTs1d/Eo8q9tcS6w7Smo7o8L2gyPgo8cD48L3A+CjxwPiAgICAgIL2o1OzV38Sjyr2/ydLUvavSu7j2svrGt7XExNqyv7Htz/PT67L6xre1xMn6svq5/bPMt9a47r+qwLSjrLTTtvi/ydLUyrnSu7j2vajU7Ln9s8zJ+rPJvt/T0LK7zay1xMTasr+x7c/ztcSy+sa3ttTP86GjyOe5+87Sw8fTw8HLvajU7NXfxKPKvaOsxMfDtNPDu6e+zda70OjSqr2o1Oy1xMDg0M2+zb/J0tS1w7W9y/zDx6Ostvi+38zlvajU7LXEuf2zzLrNz7i92r7NsrvQ6NKq1qq1wMHLoaM8L3A+CjxwPjxicj4KPC9wPgo8aDI+us7Kscq508O9qNTs1d/Eo8q9o788L2gyPgo8cD4gICAgICAg1vfSqsrH08PT2rS0vajSu9CpuLTU07XEttTP86Os1eLQqbbUz/PE2rK/ubm9qLzktcS5udTsy7PQ8s2os6PKx87Itqi1xKOstau21M/zxNqyv7XEubm8/s2os6PD5sHZ18W4tNTTtcSx5LuvoaM8L3A+CjxwPjxicj4KPC9wPgo8aDE+yr7A/TwvaDE+CjxwPjwvcD4KPHA+ICAgIMSzxOqjrNbQ0eu158rTzKi+2bDstcS0ur3awaq7ts3tu+HJz7XE0ru49tChxrejrNPQ1eLR+dK7uPbH6b3ao7rLzrWktaS4+NXUsb7JvbP2uPbM4rb5LS3I57rOsNG088/z17C1vbH5z+TA76Os1dSxvsm9w7u08MnPoaPLzrWktaS45svf1dSxvsm9serXvLTwsLijurXa0ruyvbDRsfnP5MPFtPK/qqOstdq2/rK9sNG088/zt8W9+Milo6y12sj9sr2w0bH5z+TDxbnYyc+hozwvcD4KPHA+PGJyPgo8L3A+CjxwPiAgIAo8aW1nIHNyYz0="https://www.cppentry.com/upload_files/article/45/1_exm65__.jpg" alt="\">


同理,我们可以按照这个步骤,向冰箱里装其他东西:比如,过期的牛奶,吃剩的Pizza,甚至还可以模仿俄罗斯套娃,装个冰箱(冰箱的使用详见冰箱使用手册,I bet 冰箱绝对不是这样用的。。)。。下面来看一下装大象的代码:


namespace 把大象装冰箱
{
    /*首先抽象出一个建造过程的类,将把“东西装在冰箱”
     * 这个过程给稳定住。就是说,不管向冰箱里面装什么东西
     * 都得按照这个步骤来,一步都不能丢。*/
    abstract class PutIntoFridge
    {
       
        public abstract void OpenFridge();
        public abstract void PutInto();
        public abstract void CloseFridge();
 
    }

    /*写一个把大象装冰箱的类,然后让这个类去继承PutIntoFridge
     * 在这个类里面,给出如何把大象装冰箱的具体实现。*/
    class PutElephantIntoFri : PutIntoFridge
    {
        private string name;

        public PutElephantIntoFri(string name)
        {
            this.name = name;
        }

        public override void OpenFridge()
        {
            Console.WriteLine("打开了冰箱门~~");

        }

        public override void PutInto()
        {
            Console.WriteLine("把 {0} 装进冰箱。", name);
            
        }

        public override void CloseFridge()
        {
            Console.WriteLine("把冰箱门关上了。");
        }
 
    }


    /*指挥者:用来指挥把东西装冰箱这个过程,用它来隔离用户与
     * 建造过程的关联。*/
    class Director
    {
        private PutIntoFridge pif;

        //构造的时候指明要实现把什么东西装冰箱
        public Director(PutIntoFridge pif)
        {
            this.pif = pif;
        }

        /*写一个把大象装冰箱的过程,用以隐藏具体的把大象装冰箱的过程
         * 使用时只需调用这一个方法就行。*/
        public void CreatePutIntoFif()
        {
            pif.OpenFridge();
            pif.PutInto();
            pif.CloseFridge();
        }
 
    }


    class Program
    {
        static void Main(string[] args)
        {
            PutElephantIntoFri peif = new PutElephantIntoFri("小象");
            Director director = new Director(peif);

            director.CreatePutIntoFif();

            Console.WriteLine(" ");


        }
    }
}

最后,运行一下,装冰箱成功。。。






】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C指针原理(91)-LINUX应用(3)-进.. 下一篇c语言高级编程指南1 (翻译)

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: