核心 : 简单工厂处理选择“具体哪一个实现类”的工作
本质是: 选择实现
原因: OOP里重要的思想是“面向接口编程” 接口的作用是“封装隔离”,接口定义功能,是一种协议。我们使用时一般写法是 Interface face = new Impl(); 注意,Impl是实现类,那如果有多个Impl,客户端如何知道用哪一个,那就需要客户端必须对每个实现类有一定的认识,所以这种方式并没有完全“隔离”。 简单工厂的目的就是,提供静态方法,直接生产一个Interface的实例对象,不用关心使用什么对象,如何实现对象等等,做到完全隔离。
说明:简单工厂也可以理解为一个工具类,因为它提供静态方法获取对象,所以理论上讲它里面可以提供各种各样的对象,但是为了逻辑清晰,维护方便,我们一般按模块或者系统来使用,命名规则一般是 模块+Factory,比如用户模块 UserFactory 工厂内的方法命名一般是 get或create+接口名 , 不要使用new 因为不一定我们的对象每次都是new的 ,比如我们跟单例模式使用,就仅有一个对象。多个模块就定义多个工厂。
生成对象的方法一般为
public static Interface createUser(int type){
Interface inter = null;
if(type==1){
inter = User1();
}else if(type==2){
inter = User()2;
}
选择条件的来源有3种
1. 外部 (缺点是要对外讲明不同type作用,似乎是没有完全隔离)
2. 配置文件 (灵活了很多,有个问题在配置文件里新增实现类,工厂里的逻辑代码需要改动,使用反射可以解决该问题)
3.运行时根据内存中某个值来决定
还有一点需要提示: 简单工厂因为提供静态方法所以也叫静态工厂,万能工厂模式。一般不需要实例化factory,所以为了防止客户端实例化,可以使得工厂的构造函数私有化。
简单模式一般和单利模式结合使用场景比较多,完结。