大话设计—建造者模式

【官方解释建造者模式】

名称:Builder Pattern

定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

图示:

理解:

    builder是为建造一个Product对象的各个部件指定的抽象接口。ConcreteBuilder是具体的建造者,实现builder接口,构造和装配的各个部件。Director是指挥者,用来根据用户的需求构建对象(建造一个使用Builder接口的对象)。

【自我感悟建造者模式】

花了一天多的时间,学习了建造者模式,大话上先是从小菜、大鸟吃饭引出来的主题:小菜和大鸟分别到餐馆点了炒饭和炒面。但是大鸟很点背,点的炒饭没有味道(老板忘记放盐)......当然这只是生活中再平常不过的一件小事了,却是普遍发生。对比,麦当劳、肯德基从没有出现同样的问题,原因在于后者严格按照一定的工序做事,但是中式做饭各式各样,摸不着套路。就我个人来说,特别爱吃宫保鸡丁,但是去不同的饭店点同一道菜,每次吃的味道都不一样,感觉都找不到真爱了,还是最喜欢吃姨夫做的。(哈哈,扯远了,不过,就是这么回事啊。)如果,建造者模式从一开始就植入大家的思想里,相信就不会出现这样的情况啦。

建造者模式,说白了就是用于创建一些复杂的对象,这些对象内部构建间的构造顺序通常是稳定的,但是对象内部构建通常面临着复杂的变化。


举个例子:比方说,我是房屋装修公司的一名designer,我就应该首先设计一套固定的装饰方案(明确的装饰流程),这样才能保证效率而不至于每次设计时无从下手没有头绪。当然,核心是满足顾客需求。房屋装修无外乎是要考虑:墙面粉刷、室内设计等,作为设计者需要根据客户提供的具体个人偏好进行施工,比如说,用什么颜色的墙面漆、地板砖要什么风格的、家具如何摆放等。

代码思路:首先要定义Builder抽象类,作为Director(具体设计师)使用的接口(体现了面向对象的封装性);而后是具体建造者的角色,他的任务是根据用户需求具体设计实现接口,构建需要的各个类、部件。然后在客户端显示即可啦。最后,让客户看到的是装修完成的效果即可,中间过程是不面向客户的。(纯属个人理解,如有不当之处还望大家批评指教!)

    //抽象建造者类,确定产品是由两道工序(喷漆和室内设计)组成,并得到最后结果的方法GetResult
    abstract class Builder
    {
        public abstract void BuildPartA();
        public abstract void BuildPartB();
        public abstract HouseDecoration GetResult();
    }
    //具体建造者
    class ConcreatBuilder1 : Builder
    {
        private HouseDecoration housedecoration = new HouseDecoration ();
        public override void BuildPartA()
        {
            housedecoration.Add("喷黄色漆");
        }
        public override void BuildPartB()
        {
            housedecoration.Add("室内设计为中式风格");
        }
        public override HouseDecoration  GetResult()
        {
            return housedecoration ;
        }
    }
    class ConcreatBuilder2 : Builder
    {
        private HouseDecoration  housedecoration= new HouseDecoration ();
        public override void BuildPartA()
        {
            housedecoration.Add("喷粉色漆");

        }
        public override void BuildPartB()
        {
            housedecoration.Add("室内设计为韩式风格");
        }
        public override HouseDecoration  GetResult()
        {
            return housedecoration ;
        }
    }
    //指挥者
    class Director
    {
        public void Construct(Builder builder)
        {
            builder.BuildPartA();
            builder.BuildPartB();

        }
    }

体会:学习了好几个模式了,接触最多,体会最深的就是面向对象的思想。大话这本书,最大的特点就是通过生活中的情节引出一个个的知识点,大大吸引像我这样不爱读书的孩纸。它从另一个方面教会我们:知识源于生活又高于生活,学会编织知识网。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 70
    评论
评论 70
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值