天天看点

[Head First设计模式]山西面馆中的设计模式——建造者模式

<a href="http://www.cnblogs.com/wolf-sun/p/3468100.html">[head first设计模式]山西面馆中的设计模式——装饰者模式</a>

<a href="http://www.cnblogs.com/wolf-sun/p/3473744.html">[head first设计模式]山西面馆中的设计模式——观察者模式</a>

将学习融入生活中,是件很happy的事情,不会感觉到累。一个感觉:很好玩!挺开心的......

为什么会出现建造者模式? 在软件系统中,有时面临着“一个复杂对象”的创建工作,其通常由各个部分的子对象用一定的算法构成。 这个复杂的对象的各个部分经常面临剧烈变化,但是将它们组合在一起的算法却相对稳定。 比如:建一所房子,建房子的过程基本不变(算法:画图-地基-建造),但是门窗之类的组建确是易变的。 怎么应对这种变化? 如何提供一种“封装机制“来隔离出”复杂对象的各个部分“的变化,从而保持系统中的”稳定构建算法“不随需求改变而改变,这就是建造者模式。 使用建造者模式的目的? 将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。

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

一步步创建复杂的对象,它允许用户只通过制定复杂对象的类型和内容就可以创建它们,用户不知道内部的具体构建细节。

[Head First设计模式]山西面馆中的设计模式——建造者模式

抽象建造者(builder)

为创建一个产品角色对象的各个部件指定抽象接口。

具体建造者(conctrete builder)

实现抽象建造者接口,构造和装配产品的各个部件。

定义并明确它所创建的表示。

提供一个返回这个产品的接口。

指挥者(director)

构建一个使用抽象建造者接口的对象。

产品角色(product)

被构建的复杂对象,具体建造者创建该产品的内部表示并定义它的装配过程。

包含定义组成部件的类,包括将这些部件装配成最终产品的接口。

场景:lz现在在前台点一份大份量的鸡蛋面,据吃货所知,山西面馆中,对鸡蛋面提供三种的做法,1.普通分量的 2.加2元面的大份量的 3.加一个鸡蛋的营养餐。

分析:

抽象建造者:家传制面秘方(算法),所有鸡蛋面的制作过程均要遵循本秘方,否则是砸自己的招牌啊。

具体的建造者:小康师傅(水平有限,面的多少把握不够,徒弟级别),康师傅(多年砍面技术溶于一身,造就了神般的人物,要砍多少面就多少,不多不少正好),康氏(女人,总比男人更懂得营养,营养师级别人物)

指挥者:收银员,根据order指挥这份面如何来做(是否加量,是否加鸡蛋)。

产品角色:鸡蛋面。

代码实现:

 建造者 指定不变的创建过程(算法)

[Head First设计模式]山西面馆中的设计模式——建造者模式
[Head First设计模式]山西面馆中的设计模式——建造者模式
[Head First设计模式]山西面馆中的设计模式——建造者模式

具体建造者

[Head First设计模式]山西面馆中的设计模式——建造者模式
[Head First设计模式]山西面馆中的设计模式——建造者模式
[Head First设计模式]山西面馆中的设计模式——建造者模式
[Head First设计模式]山西面馆中的设计模式——建造者模式
[Head First设计模式]山西面馆中的设计模式——建造者模式
[Head First设计模式]山西面馆中的设计模式——建造者模式

指挥者

[Head First设计模式]山西面馆中的设计模式——建造者模式
[Head First设计模式]山西面馆中的设计模式——建造者模式
[Head First设计模式]山西面馆中的设计模式——建造者模式

产品food

[Head First设计模式]山西面馆中的设计模式——建造者模式
[Head First设计模式]山西面馆中的设计模式——建造者模式
[Head First设计模式]山西面馆中的设计模式——建造者模式

控制台代码

[Head First设计模式]山西面馆中的设计模式——建造者模式
[Head First设计模式]山西面馆中的设计模式——建造者模式

结果

[Head First设计模式]山西面馆中的设计模式——建造者模式

建造者模式类似于工厂模式,但又有所不同,建造者模式最主要的功能是基本方法的调用顺序的安排,这些基本方法已经实现,而工厂方法则重点是创建,组装顺序则不关心。

使用场景

一是产品类非常复杂,或者产品类中调用顺序不同会产生不同的效果。

二是在对象创建过程中会使用到系统中的一些其他对象这些对象在产品对象的创建过程中不容易得到

参考

<a href="http://www.cnblogs.com/ywqu/archive/2010/01/11/1643753.html">http://www.cnblogs.com/ywqu/archive/2010/01/11/1643753.html</a>

博客地址:

<a href="http://www.cnblogs.com/wolf-sun">http://www.cnblogs.com/wolf-sun/</a>

博客版权:

本文以学习、研究和分享为主,欢迎转载,但必须在文章页面明显位置给出原文连接。

如果文中有不妥或者错误的地方还望高手的你指出,以免误人子弟。如果觉得本文对你有所帮助不如【推荐】一下!如果你有更好的建议,不如留言一起讨论,共同进步!

再次感谢您耐心的读完本篇文章。

转载:http://www.cnblogs.com/wolf-sun/p/3475061.html

继续阅读