简单工厂模式又称静态工厂方法模式,简单工厂不是一个标准的设计模式(不属于GoF23种设计模式),但是它很常用。
定义:
提供一个创建对象实例的功能,而无须关心其具体实现。
优点:
结构简单,调用方便。对于外界给定的信息,可以很方便的创建出相应的产品。工厂和产品的职责区分明确。
客户端无须知道所创建的具体产品类的类名,只需要“告诉”工厂所需创建产品类的参数即可。
工厂类含有必要的判断逻辑,可以决定在什么时候创建哪一个产品类的实例,客户端可以免除直接创建产品对象的责任。
缺点:
简单工厂模式的工厂类单一。负责所有产品的创建,当产品基数增多时,工厂类代码会非常臃肿,违背了高聚合原则。
系统扩展困难,一旦添加新产品就不得不修改工厂逻辑,在产品类型较多时,有可能造成工厂逻辑过于复杂,不利于系统的扩展和维护。
简单工厂模式UML类图:
代码如下:
public class Client {
public static void main(String[] args) {
IFactory fac = new Factory();
IProduct pro = fac.createProduct("B");
pro.productMethod();
}
}
interface IFactory {
IProduct createProduct(String type);
}
class Factory implements IFactory {
@Override
public IProduct createProduct(String type) {
if (type.equals("A"))
return new ProductA();
if (type.equals("B"))
return new ProductB();
return null;
}
}
interface IProduct {
void productMethod();
}
class ProductA implements IProduct {
@Override
public void productMethod() {
System.out.println("ProductA");
}
}
class ProductB implements IProduct {
@Override
public void productMethod() {
System.out.println("ProductB");
}
}