原文一
主要讲解了 简单工厂、工厂方法、抽象工厂的各自特点
原文二
对三者的区别有比较精辟将介绍
区别如下(了解区别才能对症下药)
简单工厂 : 用来生产同一等级结构中的任意产品。(对于增加新的产品,无能为力)
工厂方法 : 用来生产同一等级结构中的固定产品。(支持增加任意产品)
抽象工厂 : 用来生产不同产品族的全部产品。(对于增加新的产品,无能为力;支持增加产品族)
下面是选电脑和组装电脑,分别以工厂方法和抽象工厂来解释的区别
选电脑
可以看出:
选电脑的时候,如果用 游戏、办公等功能作为工厂的话,后期改动会很大的。因为对于用户来说,可能功能需求也就游戏、办公这么几种了,但是可以选择的品牌却层出不穷,每增加一个品牌,这个品牌的电脑一定会出游戏、办公多方向的系列,那么,工厂就要支持,就要修改,违背原则。
所以,选电脑以品牌作为工厂更好
不同的品牌,一般都包含市面几种常见的功能用途方向,那么后期添加新的品牌,我们只要添加新的品牌工厂,再添加具体机型就好了
特点:工厂方法的特点可以看出,就是可以支持增加任意新品牌产品(不需要改代码),当然代价就是产品和工厂需要同时增加。可是如果说要增加新的功能方向(用途为服务器),就不太好办了,这样每个品牌的工厂就要动刀子了。可是功能方向能有多少能,想周到了即可。
组装电脑
组装电脑比较复杂,可能市面上的电脑都不符合我的要求。那么电脑接口的实现(或抽象类的实现)就不能是单纯的某个品牌的某个电脑了。而是应该包含 组成电脑的配件属性,比如cpu、显卡、机箱、显示器、鼠标等等
这每一个配件都是一个接口,因为我们根本不知道具体cpu到底是什么样子的,我们只知道英特尔酷睿i3处理器是真实存在的。那么这个时候的具体电脑就要包含很多属性或者方法,以关联各个配件,其实细细想来,是不是各个品牌的电脑已经包含其中了呢,它们也只不过是不同配件的组合罢了。
我们组装一台电脑,就要从每个配件中选且仅选出一个具体配件然后组装即可。而每个配件选出一个的集合,就是一个产品族,比如i3,550,小显示器,这个产品族就可以代表办公族(需要配置低),办公工厂就可以使用这套配件组来进行电脑的组装。
特点:抽象工厂的特点就是,可以增加任意用途的工厂(比如增加服务器工厂,无非cup大点,内存大点而已),选择新的产品族;也可以扩展每一个配件的具体实现(比如出了i10cpu),其实这正是电脑更新换代的核心。但是不能添加新配件,试想,如果未来的电脑内置3D打印设备、更快速红牙、黑牙连接什么的作为标配,那么所有的工厂就都要修改了。
我的观点就是,工厂方法 和 抽象工厂 是解决两种问题的,不能互为取代,并且,修改不修改什么的,需要设计对了才行,设计烂了,都要修改
2362

被折叠的 条评论
为什么被折叠?



