抽象工厂解决产品族?

来源:5-2 工厂方法coding

birdskyws

2018-12-24

如何理解抽象工厂解决产品族,工厂解决产品等级?

写回答

2回答

geelylucky

2018-12-24

同学,你好,我是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里面可以同时生产水果和蔬菜,形成产品族的概念。

如果还有其他疑问,请留言告知。

希望能帮助到你。


2
1
Geely
例子很恰当
2019-01-02
共1条回复

Geely

2019-01-02

你好,同学~~课程的例子就可以帮助理解~~具体如何理解问的面有点大,其实我认为alphalucky回答的非常不错,同学可以深入思考一下

0
0

Java设计模式精讲-Debug方式+内存分析

系统学习设计原则,设计模式,锤炼编码内功,赢取高薪Offer

3430 学习 · 407 问题

查看课程