通过工厂模式,我们可以将对象的创建封装起来,达到提高重用和与业务代码解耦的目的。
工厂模式分为三类
- 简单工厂
- 工厂模式
- 抽象工厂
简单工厂
定义
简单工厂:不算是一个真正的设计模式,却是一个常用的,将对象的创建和业务代码解耦的方案。
适用场景
在程序运行过程中,根据传递的参数获取某个接口/抽象类的具体实现。适用于不是很复杂的对象的创建。
一般是提供静态方法,根据参数的不同返回不同的实例。
工厂代码
public class SimpleFactory {
public static Object createBean(String type){
if (Objects.equals("string",type)){
return new String();
}else if (Objects.equals("int",type)){
return new Integer(0);
} else if (Objects.equals("bigdecimal",type)) {
return BigDecimal.ONE;
}else {
return new Object();
}
}
}
类图
工厂模式
定义
工厂模式:定义了一个创建对象的接口,由子类(子工厂)决定提供哪些类的实例。工厂方法让类把实例化推迟到子类。
适用场景
一般是提供工厂接口,然后根据不同场景获取具体的工厂实例,再进行对象实例的获取。
工厂代码
public interface Factory {
Object createBean(String type);
}
class FactoryA implements Factory{
@Override
public Object createBean(String type) {
if (Objects.equals("string",type)){
return new String();
}else if (Objects.equals("int",type)){
return new Integer(0);
} else if (Objects.equals("bigdecimal",type)) {
return BigDecimal.ONE;
}else {
return new Object();
}
}
}
类图
抽象工厂
定义
抽象工厂:提供一个接口,用于创建相关或依赖对象的家族,而不需要指明具体的类。
使用场景
跟工厂模式一样提供工厂接口,但是工厂中不再是单一类的实例,而是与之相关的一系列类的实例
例如:访问数据库时,根据底层数据库的不同获取到的工厂也不同,返回的数据库连接、数据集等也不尽相同。
工厂代码
public interface AbstractFactory {
Object createBean();
DataSource createDataSource();
Connection createConnection();
}
interface DataSource{}
interface Connection{}
class FactoryA implements AbstractFactory{
@Override
public Object createBean() {
return null;
}
@Override
public DataSource createDataSource() {
return null;
}
@Override
public Connection createConnection() {
return null;
}
}