工厂方法模式与抽象工厂模式的分析与比较

这两天又了解了工厂方法模式与抽象工程模式。我习惯把一些东西对比分析,这样理解会更加深刻。

工厂方法模式的组成成员:一个工厂类、一个产品接口、若干实现接口的具体产品类;

工厂方法模式的特点:
产品接口:
将产品的公共属性和方法抽象出来;
具体产品类:
实现产品接口;
工厂类:
产生产品的方法,一般通过反射获取产品,返回产品接口类型;


抽象工厂模式的组成成员:一个工厂接口、若干个实现工厂接口的实体工厂、一个产品接口、若干个抽象产品、若干个实体产品;

抽象工厂模式的特点:
产品接口:
包含公共的产品属性和方法;
抽象产品:
产品分类,每一种产品都有一个实现产品接口的抽象产品类;
实现产品接口中一部分公共方法,这部分是这一类产品所共有的;
实体产品:
继承某个抽象产品类,并实现抽象类中未实现的接口方法;
工厂接口:
包含公共的生成产品的方法,一般通过反射获取产品实例,返回产品接口类型;
实体工厂:
实现抽象工厂的方法,只生产某种类别的产品;
有多少个抽象产品,工厂中就有多少个方法。

由以上分析看来,在工厂方法模式中添加产品的类别,以及生成不同类别产品的工厂,就成了更具有普遍意义的抽象工厂模式。

抽象工厂模式中有两个重要概念:产品族和产品结构。
简单理解为产品族即具体的产品,产品结构即产品的分类。
增加产品族只需要增加工厂就OK;增加产品结构则需要添加新的产品类型,所有的工厂都要添加产生新类型产品的方法。
如:人可以分为男人和女人,同时可分为富人和穷人。
假设处理为:富人类和穷人类;生产男人的工厂和生产女人的工厂。
添加“人妖”或者“太监”就只需要添加工厂就OK;而添加“超级富豪”或者“超级穷光蛋”则需要在已有的工厂中,除了“生产富人”和“生产穷人”之外,还要添加“生产超级富豪”或者“生产超级穷光蛋”的方法。
所以合理的做法应该是:男人类和女人类;生产富人的工厂和生产穷人的工厂。因为性别比较稳定,基本上不会变动(虽然出现了春哥和著姐等大腕,但大多数人还是正常的),这种处理方式更能支持ocp原则。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值