简单工厂
不是标准的设计模式,但是经常使用。
定义
提供一个创建对象实例的功能,而无须关心其具体实现。被创建实例的类型可以是接口、抽象类、具体类
public interface Api{
public void operation();
}
/*----------文件分割-------------*/
public class Api1 implements Api{
@Override
public void operation(){
System.out.println("api实现1方式");
}
}
/*----------文件分割-------------*/
public class Api2 implements Api{
@Override
public void operation(){
System.out.println("api实现2方式");
}
}
/*----------文件分割-------------*/
//可以添加更多的api实现类
简单工厂解决方案
public class Factory{
public static Api createApi(String key){
Api api = null;
if("1".equals(key)){
api = new Api1();
}
if("2".equals(key)){
api = new Aip2();
}
/*...在工厂中提供更多新创建的实现类模板
*/
return api;
}
}
public Class Client{
public static void main(String []args){
//工厂中添加和删除模板不影响客户端的实现
Api api = Factory.createApi("1");
api.operation();
}
}
不使用简单工厂解决方案
public Class Client{
public static void main(String []args){
//Api api = Factory.createApi("1");
Api api = new Api1();
//Api api = Factory.createApi("2");
Api api = new Api2();
api.operation();
}
}
认识简单工厂
1、简单工厂的功能
可以用来创建接口、抽象类或普通类的实例
2、静态工厂
通常把简单工厂实现成工具类,也称为静态工厂
3、万能工厂
理论上可以创建任何对象,所有称为万能工厂
创建对象范围控制在独立的组件级别或模块级别
命名建议
1、类名 “模块名称+Factory”
2、方法名称“get/create+接口名称”
写法
方法内部主要实现的功能是"选择合适的实现类"创建实例–参数来源于client
可配置的简单工厂–参数来源于配置文件
优缺点
- 帮助封装
- 解耦
- 可能增加客户端的复杂度
- 不方便扩展子工厂