建造者模式怪就怪在有一个导演类(Director)。
本来,建造什么东西,应该放在建造类(Builder),由它来封装建造过程。
但建造者模式里面,偏偏将这个建造过程,放在导演类。建造者只提供建造基本东西的方法,由导演类来按需调用,任意组合。如果一个建造者的建造方法,随意组合,就能够千变万化,得到各种不同结果,显然结果就不能放在建造者类里面,由建造者提供。
如果用拍戏来做例子,建造者模式还真切合:演员就是Builder,导演就是Director,影片就是Product。演员会各种演技(各种建造方法),就看导演怎么安排(调用)了。
而我现在读的这本设计模式教材(清华大学出版社),举的例子是麦当劳里的套餐。Builder1是套餐A,Builder2是套餐B,然后由侍应(Director)来指定内容,我认为例子举的不恰当,不好理解。套餐本来就是固定的,尽管里面有饮料,有薯条什么的,但无须什么组合。难道套餐还可以增减内容的?这还叫套餐吗?应该说套餐是Director才对。
如果非要用美式快餐店来做建造者模式的例子,我认为可以这样举例:
Director:叫外卖的人
Builder1:麦当劳
Builder2:肯德基