不属于GoF23 种设计模式
定义:简单工厂模式(Simple Factory Pattern):定义一个工厂类,它可以根据参数的不同返回不同类的实例,被创建的实例通常都具有共同的父类。因为在简单工厂模式中用于创建实例的方法是静态(static)方法,因此简单工厂模式又被称为静态工厂方法(Static Factory Method)模式,它属于类创建型模式。
基本流程:
要点: 当你需要什么,只需要传入一个正确的参数,就可以获取你所需要的对象,而无须知道其创建细节。
对产品类进行重构,不能设计一个包罗万象的的产品类,而需根据实际情况设计一个产品层次结构
- Product
提供公共方法的实现,即所有产品都需要的方法。
提供抽象业务方法,不同产品可以根据需要及定义该方法。
abstract class Product {
//所有产品类的公共业务方法
public void methodSame() {
//公共方法的实现
}
//声明抽象业务方法
public abstract void methodDiff();
}
- ConcreteProduct
class ConcreteProduct extends Product {
//实现业务方法
public void methodDiff() {
//业务方法的实现
}
}
- Factory
简单工厂模式的核心是工厂类,在没有工厂类之前,客户端一般会使用new关键字来直接创建产品对象,而在引入工厂类之后,客户端可以通过工厂类来创建产品
class Factory {
//静态工厂方法
public static Product getProduct(String arg) {
Product product = null;
if (arg.equalsIgnoreCase("A")) {
product = new ConcreteProductA();
//初始化设置product
}
else if (arg.equalsIgnoreCase("B")) {
product = new ConcreteProductB();
//初始化设置product
}
return product;
}
}
简单工厂模式改进方案
我们可以将静态工厂方法的参数存储在XML或properties格式的配置文件中。
- 无需修改代码中的参数,重新编译代码。只需要修改配置文件里的内容即可。
不足:
当系统中需要引入新产品时,由于静态工厂方法通过传入参数的不同来创建不同的产品,这必定要修改工厂类的源代码,违背“开闭原则”
参考作者:刘伟 http://blog.****.net/lovelion