工厂模式的核心目的在于使对象实例化与对象使用之间解耦,在实现这一目标的基础上有三种实现方式。
1、简单工厂模式
(1)抽象出目标对象的共同行为,构建对象接口
(如对电脑来说,制造键盘、鼠标、显示器、CPU等)
(如对数据来说,进行加、减、乘、除)
(如对汽车来说,进行制造)
(2)对每一种对象创建实体类,并实现接口方法
(如微软电脑、苹果电脑、华为电脑、联想电脑等)
(数据通常只有一种,也可以分为整数、浮点数、字符数据)
(汽车可以按品牌分类,也可以按车型和颜色分类,主要看实际需求)
(3)创建工厂实体类,该工厂类由对象接口聚合而成,或者也可以构箭简单的依赖关系。
最关键的一点是工厂实体类的成员方法必须能够在不同参数条件下生成不同对象实体类的实例化对象,并进行返回。
(4)简单工厂模式也可以使用文件流读取外部文件*.properties的键值对,并使用反射的方式进行获取实例化对象。(应用实体类的Class字节码对象的成员方法clazz.newInstance())
2、标准工厂模式
(1)由于简单工厂模式中的工厂类当面临目标对象种类增加时,需要对类的结构进行修改,所以并不满足设计原则中的开闭原则。
(2)所以在标准工厂模式中,对工厂实体类进行抽象。
(3)在工厂模式中,我们需要首先构建工厂抽象类或接口,并为每一种目标对象的构建创造实现类,并在实现类的方法中只生成该类所对应的一种实例化对象。
3、抽象工厂模式(工厂车间模式)
当目表对象分类增加时,或者分类对象的每一部分都要求进行对象创建时,工厂模式的劣势就体现出来了——由于每个精确的目标对象都要拥有独一无二的工厂类,它使得系统的工厂实体类数量就达到了相当高的数量。
此时,我们需要整合工厂类,再次进行抽象。
**具体方法:**将同属一个大类的目标对象,或者是同是一个大目标对象的组成部分的目标对象的工厂方法放在一个工厂类中。这在一定程度上保证了工厂类的数量大幅度减少,但同时也免不了违反开闭原则。