一、前言
工厂模式是个比较复杂的模式,大体上分为三类:
1、简单工厂模式;
2、工厂方法模式;
3、抽象工厂模式;
二、什么是简单工厂模式
简单工厂模式(Simple Factory Pattern),它属于创建型模式。简单工厂模式,常规实现方式是,简单工厂类中,根据不同的入参,返回不同的实例。
简单工厂模式专门定义一个类,来负责创建其他类的实例,被创建的实例通常都具有共同的父类
三、为什么使用简单工厂模式
1、为了解耦;
把对象的创建和使用过程分开,对象的创建交给工厂类。
2、减少重复代码,提高代码复用;
对于复杂的对象创建,一处创建,多处复用,同时方便后期修改维护。
3、减少创建逻辑错误;
使用者不需要知道对象创建过程,只需要使用,减少使用者创建逻辑的错误。
四、简单工厂模式的结构
1、SimpleFactory(工厂角色):简单工厂模式的核心,它负责实现创建所有实例的内部逻辑,该类可以被外界直接调用,创建所需的产品对象。
2、IProduct(抽象产品角色):简单工厂模式创建的所有对象的父类,它负责所有具体产品类的公共接口。
3、Product1、Product2(具体产品角色):简单工厂模式所创建的真正对象。
五、代码示例
5.1、抽象产品类
public abstract class IProduct {
public void doSameThing(){
//公共方法的实现
}
//声明抽象业务方法
public abstract void doDiffThing();
}
5.2、具体产品类
public class Product1 extends IProduct {
@Override
public void doDiffThing() {
System.out.println("做产品1的事情...");
}
}
public class Product2 extends IProduct {
@Override
public void doDiffThing() {
System.out.println("做产品2的事情...");
}
}
5.3、简单工厂类
public class SimpleFactory {
public static IProduct createProduct(String type){
IProduct product = null;
if("1".equals(type)){
product = new Product1();
}else if("2".equals(type)){
product = new Product2();
}
return product;
}
}
5.4、客户端类
public class Client {
public static void main(String[] args){
IProduct product = SimpleFactory.createProduct("1");
product.doDiffThing();
product.doSameThing();
}
}
六、简单工厂模式的优缺点
6.1、缺点
简单工厂模式的缺点体现在工厂类上,由于工厂类集中了所有对象的创建逻辑,所以“高内聚”做得并不好。同时,当具体产品类不断增多时,拓展性并不好。
通过反射来解决拓展性和高内聚缺陷
6.1.1、简单工厂类
public class SimpleFactory {
public static IProduct createProduct(String type){
Class product = Class.forName(type);
return (IProduct) product.newInstance();
}
}
6.1.2、客户端类
public class Client {
public static void main(String[] args){
IProduct product = SimpleFactory.createProduct("com.fyb.factory.Product1");
product.doDiffThing();
product.doSameThing();
}
}