目的
将创建过程从客户端分离,在一定程度上降低耦合度,根据传入参数的不同创建不同的实例。
定义
简单工厂模式,又称为静态工厂方法模式,它属于类创建模式;创建一个类,根据传入的参数返回不同类的实例,这些实列类通常拥有共同的父类,
结构
- product:abstract作为要实例化类的共同父类
- concreteProduct:实例化的具体类
- Factory:创建实例的工厂
demo
product
public abstract class Product {
}
concreteProduct
public class ProductA extends Product {
}
public class ProductB extends Product {
}
- 直接才能创建
public class Client {
public static void main(String[] args) {
String name = "A";
Product product= null;
if (name.equals("A")) {
product = new ProductA();
}else if (name.equals("A")) {
product = new ProductB();
}else{
throw new RuntimeException("illegal param");
}
}
}
- 使用简单工厂模式 factory
public class Factory {
public static Product getInit(String name) {
Product product= null;
if (name.equals("A")) {
product = new ProductA();
}else if (name.equals("A")) {
product = new ProductB();
}else{
throw new RuntimeException("illegal param");
}
return product;
}
}
client
public class Client {
public static void main(String[] args) {
String name = "A";
Product product= Factory.getInit(name);
}
}
对比以上两种创建方式,可以直接看出使用简单工厂模式可以有效的将对象创建的过程从client解耦出来。
优点
客户端只需要传入工厂所需的参数即可,无需知道创建内部的详细过程,一切细节都有工厂代为执行。
缺点
由于工厂创建对象时需要进行一系列的逻辑判断,所以当需要实例化的类别过多时就会对工厂造成一定的负荷,维护有一定复杂。
总结
简单工厂模式适用于客户端无需知道创建细节,只需要传入参数获取对象进行消费,并且工厂所需要实例化的类别不会很多的情况。