我在实际工作中还没有用过工厂方法,下面简单谈谈我的理解,供大家参考。
类图:
这个图一下子不太好理解,我们先回顾一下简单工厂,简单工厂是通过一个方法来包装new对象的动作,如果我们将new对象的动作包装到一个类中,那么这个类就可以看成是一个工厂,该工厂专门用来产生某些对象的。
有时候我们希望能生产苹果、西瓜、葡萄等不同品种的水果,这样一个工厂就不能满足要求,我们需要分别做出苹果工厂、西瓜工厂、葡萄工厂,需要苹果时就调用苹果工厂的CreateProduct()就搞定了。
但问题来了,我们希望程序不需要管是苹果工厂还是西瓜工厂,总之是工厂就行了。这样我们就需要将这些苹果工厂、西瓜工厂、葡萄工厂抽象为水果工厂了,就好像上图中的ProductA_Factory,ProductB_Factory继承了抽象类Factory。
上图中无论是哪个工厂,生产的都是Product,Product、Factory已经被抽象,而ProductA_Factory实际生产的是ProductA1、ProductA2,ProductB_Factory实际生产的是ProductB1、ProductB2,注意上图中用了相同的颜色来表示哪个工厂生产哪些产品。
请看下一文……
张传波
大大大火球
软件研发及管理分享大师,《火球-UML大战需求分析》作者,创新工场敏捷课程讲师,豆芽儿-软件研发人才成长社区(www.douya2.com)创始人,豆芽儿公众号原创作者