设计模式——建造者

本文介绍了建造者模式,一种创建型设计模式。通过将复杂对象的构建与其表示分离,确保了构建过程的一致性,允许不同的构建过程创建相同结构的对象。文章详细解释了建造者模式的角色与工作原理,并通过游戏角色创建的例子展示了其实现过程,强调了建造者模式在流程控制和扩展性方面的优势。
摘要由CSDN通过智能技术生成
    最近的心得,我发现学一门设计模式,不管你是否能立刻理解它,第一最要紧的是要记住两个东西。 1、它是属于什么范畴的设计模式。2、记住UML图。 这两个是打开这个设计模式之门的金钥匙!为什么这么讲?因为刚刚学新的设计模式,如果一味的埋头在文字中,思想中,代码编写的例子中,如果你这个设计模式又不是看的很懂,实在是会让人晕头转向看的吐血身亡。结果在身亡前,你都不知道这个设计模式干什么用,也不知该怎么去写。心得是,看完一篇设计模式文章,先记住它属于什么范畴的设计模式,然后就是把UML类图背记下来。再然后回头再看一遍,这样你可能就慢慢懂了些。也能很快的通过uml图编写出代码来。即便此时你不是很深刻的理解他。因为设计模式,无非就是设计出这样的类的关系来,所以记住了范畴和uml类图,不管三七二十一,碰到这个需求,先按照这样的关系来设计。久而久之,你就能越来越明白这个设计模式的精髓到底是什么了。

    好,今天讲的是建造者。

    1、认识建造者
    建造者模式属于创建型模式(先记下)。顾名思义,builder的意思是建造者或者建筑工人。例如:楼房是千差万别的,楼房的外形,层数,内部房间的数量,房间的装饰都不一样。但是对于建造者来说,抽象出来的建筑流程是确定的。因为建筑一座楼房,都可以归纳为几个步骤:1打桩、2建地基、3搭框架、4内部建设。同理,建造者设计模式也是基于这样的概念而生的,这个设计模式用来解决什么样的情况呢:即流程不变,但每个流程实现的具体细节是会变化的。这样的情况,可以考虑使用建造者。就像盖房子,4个流程都必须有,但每个流程各自的实现细节,各个房子各有不同。建造者模式的好处就是保证了流程不会变化,即流程不会增加也不会遗漏,也不会产生流程次序的错误。这是非常重要的,看新闻,一些楼歪歪的事件,很多都是建设楼盘的时候,流程出现了问题导致的。(看来这些人并不知道建造者模式啊)。而建造者模式,保证了流程的确定性,而流程内部的实现细节,是可继承扩展的。从根源上解决了流程不规范的问题。

    福清有一道小吃叫海蛎饼,家家户户都会做,但各家各户做的味道都不同。虽然味道不同,但制作海蛎饼的流程步骤,大致都是一样的。一个成功的海蛎饼,外酥内嫩,滋味丰富。虽然口感各有不同,但只要流程步骤不差,都会做出好吃的海蛎饼。而一些刚嫁人的新媳妇们制作海蛎饼却不如婆婆好,因为新媳妇刚学做,不熟悉流程,难免流程常有疏漏。而如果让婆婆站在媳妇旁把控制作流程,海蛎饼就不会差。所以说,如果流程控制好了,生产出来的海蛎饼就不会差。

    写代码也是如此,如果你遇到一个需要把控流程,但流程中的实现细节各有许多的方式,你可以采用建造者模式。用一个director类把控流程,而用许多不同的builder去建造流程中的细节并产生产品。这样,生产出来的产品是绝对不会出问题的。因为流程把控好了。你可以有多个builder去负责建造生产产品,而让director去把控流程。如果有新的产品,但是流程一致,你可以再扩张出一个builder来。这样,你看,建造者模式是不是很符合OCP原则呢。

    说了这么多,来看下建造者模式的概念: 将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以有不同的表示。

    嗨,这个概念看起来总是这么深奥难懂。大概的意思,就是一套的构建过程可以有不同的产品(表示)出来。这些产品(表示)都按照这一套的构建过程被生产出来。

    建造者模式通常包括以下这几个角色:
    1、Builder:给出一个抽象接口,规范建造者对于生产的产品的各个组成部分的建造。这个接口只是定一个规范,不涉及具体的建造,具体的建造让继承于它的子类(ConcreteBuilder)去实现。
    2、ConcreteBuilder:实现builder接口,针对不同的商业逻辑,具体化各对象部分的建造,最后返回一个建造好的产品。
    3、Director:导演,顾名思义,负责规范流程之用。在指导中不涉及产品的创建,只负责保证复杂对象各部分被创建或按某种顺序创建。
    4、Product:复杂对象。
    按照惯例,给出建造者模式的UML图(这个先记下来,非常有用,学一个设计模式,先把这个图记下来!)
    


     2、一个建造者的实例。
    在此,以这篇文章作为参考
  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 14
    评论
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值