建造模式是之前讲的模式中,最为简单的易懂的一种模式。就好比堆积木一样,你可以拿最简单的零件组成一个超级复杂的机器人,或者另外的什么好玩具。
而什么,本来就很简单的横竖,就能产生这么神奇的效果呢?
这就是建造模式。
这个通过一个身边的例子,会马上明白这个过程,那就是,你去KFC买东西吃。
典型的儿童餐包括一个主食,一个辅食,一杯饮料和一个玩具(例如汉堡、炸鸡、可乐和玩具车)。这些在不同的儿童餐中可以是不同的,但是组合成儿童餐的过程是相同的。
这里所说的意思,就是,你去肯德基买东西,收银员并不知道,你要买什么,所以你的组合是变化的,而不管怎么变,最后,你都能买到你想要的产品,不管你今天想吃的东西组合有多复杂,都能满足你。所以这个过程就是建造。
客户端:顾客,想去买一套套餐(这里面包括汉堡,可乐,薯条),可以有1号和2号两种套餐供顾客选择。
指导者角色:收银员。知道顾客想要买什么样的套餐,并告诉餐馆员工去准备套餐。
建造者角色:餐馆员工。按照收银员的要求去准备具体的套餐,分别放入汉堡,可乐,薯条等。
产品角色:最后的套餐,所有的东西放在同一个盘子里面。
整个过程就是:
你(客户)买可乐,薯条,付钱给收银员,然后他就会告诉后台说,出个可乐和薯条,然后等会就有人拿出来,你要的套餐(产品),你可以从柜台收银员那里拿到,假如你去餐厅(这个时候就是服务员给你送来的),说这个,就是体现产品类,可以在指导者中,也可以在建造者里面(因为他弄好套餐直接,就送过来了)。
直接来张图看个明白:
贴2个实用的链接:
1.http://blog.csdn.net/chmask/article/details/2631485
2.http://blog.csdn.net/hguisu/article/details/7518060
最后,关于建造者模式和工厂模式区别,别人的总结就是:
建造者模式与工厂模式类似,他们都是建造者模式,适用的场景也很相似。一般来说,如果产品的建造很复杂,那么请用工厂模式;如果产品的建造更复杂,那么请用建造者模式。
用我的话说,就是,你去大众公司买汽车,你说,买个没有后门的桑塔纳2000?可以买到吗?肯定没有啊,因为这些车子都是工厂,全部自己订做好的,工厂模式。
而你去买一台组装电脑,告诉老板说,我要买一个机箱,键盘,音响,不要显示器??可以嘛,当然了,老板肯定卖给你,可是又人问,没有显示器买个啥电脑啊!!难道没显示 ,电脑就不能用了?哈哈,我用它听音乐。。。
不知道,大家理解了我觉得这2个例子了吗?上面抽象工厂模式,是有工厂统一构造,充当指导者,而后者因为太复杂,需要有专门的人来充当指导者,也就是顾客你,毕竟顾客才是上帝嘛。。。