工厂模式

原文一
主要讲解了 简单工厂、工厂方法、抽象工厂的各自特点

原文二
对三者的区别有比较精辟将介绍

区别如下(了解区别才能对症下药)

简单工厂 : 用来生产同一等级结构中的任意产品。(对于增加新的产品,无能为力)

工厂方法 : 用来生产同一等级结构中的固定产品。(支持增加任意产品)

抽象工厂 : 用来生产不同产品族的全部产品。(对于增加新的产品,无能为力;支持增加产品族)

下面是选电脑和组装电脑,分别以工厂方法和抽象工厂来解释的区别
这里写图片描述

选电脑
可以看出:
选电脑的时候,如果用 游戏、办公等功能作为工厂的话,后期改动会很大的。因为对于用户来说,可能功能需求也就游戏、办公这么几种了,但是可以选择的品牌却层出不穷,每增加一个品牌,这个品牌的电脑一定会出游戏、办公多方向的系列,那么,工厂就要支持,就要修改,违背原则。

所以,选电脑以品牌作为工厂更好
这里写图片描述
不同的品牌,一般都包含市面几种常见的功能用途方向,那么后期添加新的品牌,我们只要添加新的品牌工厂,再添加具体机型就好了

特点:工厂方法的特点可以看出,就是可以支持增加任意新品牌产品(不需要改代码),当然代价就是产品和工厂需要同时增加。可是如果说要增加新的功能方向(用途为服务器),就不太好办了,这样每个品牌的工厂就要动刀子了。可是功能方向能有多少能,想周到了即可。

组装电脑
组装电脑比较复杂,可能市面上的电脑都不符合我的要求。那么电脑接口的实现(或抽象类的实现)就不能是单纯的某个品牌的某个电脑了。而是应该包含 组成电脑的配件属性,比如cpu、显卡、机箱、显示器、鼠标等等

这每一个配件都是一个接口,因为我们根本不知道具体cpu到底是什么样子的,我们只知道英特尔酷睿i3处理器是真实存在的。那么这个时候的具体电脑就要包含很多属性或者方法,以关联各个配件,其实细细想来,是不是各个品牌的电脑已经包含其中了呢,它们也只不过是不同配件的组合罢了。

我们组装一台电脑,就要从每个配件中选且仅选出一个具体配件然后组装即可。而每个配件选出一个的集合,就是一个产品族,比如i3,550,小显示器,这个产品族就可以代表办公族(需要配置低),办公工厂就可以使用这套配件组来进行电脑的组装。

特点:抽象工厂的特点就是,可以增加任意用途的工厂(比如增加服务器工厂,无非cup大点,内存大点而已),选择新的产品族;也可以扩展每一个配件的具体实现(比如出了i10cpu),其实这正是电脑更新换代的核心。但是不能添加新配件,试想,如果未来的电脑内置3D打印设备、更快速红牙、黑牙连接什么的作为标配,那么所有的工厂就都要修改了。

我的观点就是,工厂方法 和 抽象工厂 是解决两种问题的,不能互为取代,并且,修改不修改什么的,需要设计对了才行,设计烂了,都要修改

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值