同学,你好,我是geely老师的助教。
我是这样理解的:
简单工厂:点
工厂模式:线
抽象工厂:面
举一个简单的例子吧:
有一个水果园,里面种了很多水果,有苹果,香蕉,橙子。
根据上面的描述,我们可以归结为以下几个类:
简单工厂:
接口:Fruit Gardener生产Fruit
实现:Apple------------->Fruit, Banana------------->Fruit, Orange------------->Fruit..等等
工厂类:FruitGardener专门生产Fruit
按照以上设计,这个水果的生产过程完全和外界独立,需要哪个水果只需要和工厂类说一声就可以了,但是有一个很显著的问题在于,如果水果园里面需要再种植其他水果的话,是需要修改FruitGardener类中生产水果的代码的,这个时候就需要使用工厂模式来解决这个缺点了。
工厂模式:
接口:Fruit Gardener生产Fruit
实现:Apple-------实现------>Fruit, Banana-------实现------>Fruit, Orange-------实现------>Fruit..等等
工厂类:AppleGardener---实现--->Gardener, BananaGardener-----实现-->Gardener OrangeGardener-------实现------>Gardener..等等
按照以上这个套路,即使水果园里面需要种其他水果,也可以通过增加更多的水果园来生产对应的水果(产品等级的概念)。
当工厂模式满足水果园增加新水果的需求后,又接到需求要求再水果园里面同时种植蔬菜,这样的话,它就不仅仅只是生产水果了,而是增加了新的产品类型(产品族的概念)。
抽象工厂:
接口:Fruit Vegetables Gardener生产Fruit和Vegetables
实现:Apple------------->Fruit, Banana------------->Fruit, Orange------------->Fruit...等等
Cabbage--------->Vegetables Broccoli-------->Vegetables Celery-------->Vegetables..等等
工厂类:GardenerOne-------->Gardener GardenerTwo-------->Gardener...等等
这个时候的Gardener里面可以同时生产水果和蔬菜,形成产品族的概念。
如果还有其他疑问,请留言告知。
希望能帮助到你。