这两天又了解了工厂方法模式与抽象工程模式。我习惯把一些东西对比分析,这样理解会更加深刻。
工厂方法模式的组成成员:一个工厂类、一个产品接口、若干实现接口的具体产品类;
工厂方法模式的特点:
产品接口:
将产品的公共属性和方法抽象出来;
具体产品类:
实现产品接口;
工厂类:
产生产品的方法,一般通过反射获取产品,返回产品接口类型;
抽象工厂模式的组成成员:一个工厂接口、若干个实现工厂接口的实体工厂、一个产品接口、若干个抽象产品、若干个实体产品;
抽象工厂模式的特点:
产品接口:
包含公共的产品属性和方法;
抽象产品:
产品分类,每一种产品都有一个实现产品接口的抽象产品类;
实现产品接口中一部分公共方法,这部分是这一类产品所共有的;
实体产品:
继承某个抽象产品类,并实现抽象类中未实现的接口方法;
工厂接口:
包含公共的生成产品的方法,一般通过反射获取产品实例,返回产品接口类型;
实体工厂:
实现抽象工厂的方法,只生产某种类别的产品;
有多少个抽象产品,工厂中就有多少个方法。
由以上分析看来,在工厂方法模式中添加产品的类别,以及生成不同类别产品的工厂,就成了更具有普遍意义的抽象工厂模式。
抽象工厂模式中有两个重要概念:产品族和产品结构。
简单理解为产品族即具体的产品,产品结构即产品的分类。
增加产品族只需要增加工厂就OK;增加产品结构则需要添加新的产品类型,所有的工厂都要添加产生新类型产品的方法。
如:人可以分为男人和女人,同时可分为富人和穷人。
假设处理为:富人类和穷人类;生产男人的工厂和生产女人的工厂。
添加“人妖”或者“太监”就只需要添加工厂就OK;而添加“超级富豪”或者“超级穷光蛋”则需要在已有的工厂中,除了“生产富人”和“生产穷人”之外,还要添加“生产超级富豪”或者“生产超级穷光蛋”的方法。
所以合理的做法应该是:男人类和女人类;生产富人的工厂和生产穷人的工厂。因为性别比较稳定,基本上不会变动(虽然出现了春哥和著姐等大腕,但大多数人还是正常的),这种处理方式更能支持ocp原则。
分享到:
相关推荐
介绍的是工厂模式 包括简单工厂模式、工厂方法模式、抽象工厂模式 包括PPT和代码
工厂方法模式和抽象工厂模式的区别,对工厂方法模式和抽象工厂模式做了简单的比较
本文章通俗易懂的对工厂模式进行了讲解,相信您看完这篇文章会对工厂模式有更深入的了解
深入浅出设计模式之抽象工厂模式+工厂方法模式+策略模式实现手机加工厂(加类图)
本资源主要介绍工厂方法模式和抽象工厂模式。二者都与工厂相关,,但是其本质又大相径庭。这里先来简单介绍下二者的区别,以免混淆。 抽象工厂模式:提供一个接口,用于创建一系列相关的对象,而无需指定具体的类。...
抽象工厂设计模式抽象工厂设计模式 抽象工厂设计模式 抽象工厂设计模式 抽象工厂设计模式 抽象工厂设计模式 抽象工厂设计模式
Java实现的工厂模式,抽象工厂,工厂方法模式
从简单工厂,到工厂方法到抽象工厂,这几种都带有“工厂”的模式,总是容易叫人迷糊,我仔细研究了下,然后用简单的例子做类比,列出了自己的通俗理解和比较,大部分是自己的体会,感觉理的比较清楚,末尾提了下...
用java语言实现工厂方法模式和抽象工厂模式
工厂方法与抽象工厂设计模式,这份文档介绍了这种设计模式
4.简单工厂-工厂方法-抽象工厂 对比总结
工厂方法模式和抽象工厂模式
java设计模式 抽象工厂模式详解 一张图让你彻底明白抽象工厂模式
博文链接:https://linpyi.iteye.com/blog/226658
设计模式,AbstractFactory,抽象工厂模式
设计模式之工厂方法、简单工厂、抽象工厂
IOS 设计模式抽象工厂实例Demo IOS 设计 模式 抽象 工厂
基于Java实现的23种设计模式Demo,抽象工厂模式、建造模式、工厂方法模式、原型模式、单例模式、外观模式、适配器模式等 Java设计模式共有23种,分别为:抽象工厂模式、建造模式、工厂方法模式、原型模式、单例模式...
通过C++实现了简单工厂模式、工厂模式、抽象工厂模式三大设计模式的经典案例。
设计模式-抽象工厂模式(讲解及其实现代码)