一、模式定义
简单工厂模式(Simple Factory Pattern):定义一个类(通过向其传递参数方式)来创建其他类的实例(这些类通常具有共同父类)的模式,又称为静态工厂方法(Static Factory Method)模式。
二、模式类图
简单工厂类(SimpleFacotry):用于生产不同的类对象
抽象产品(Product):用于定义存放产品类,存放产品的共有属性。
具体产品(ConcreteProductA & B):继承抽象产品类,并存放产品的特有属性。
三、模式简要代码(JAVA代码)
class SimpleFactory {
//用静态方法的好处是:不用实例化工厂对象,直接通过类名调用使用即可
public static Product FactoryMethod(String arg) {
//这里是简单工厂类
if(arg.equals("A")) { return new ConcreteProductA();}
else if(arg.equals("B")) { return new ConcreteProductB();}
else { System.out.println("error"); return null;}
}
}
abstract class Product{
//这里是抽象产品类
void SameOperation() {}
abstract void DiffOperation();
}
class ConcreteProductA extends Product{
//这里是具体产品类A
void DiffOperation() {
System.out.println("This is ConcreteProductA");
}
}
class ConcreteProductB extends Product{
//这里是具体产品类B
void DiffOperation() {
System.out.println("This is ConcreteProductB");
}
}
//主函数
public class Main{
public static void main(String[] args) {
Product A = SimpleFactory.FactoryMethod("A");
Product B = SimpleFactory.FactoryMethod("B");
A.DiffOperation();
B.DiffOperation();
}
}
四、模式优点与缺点
1、优点方面
<1>将对象的创建和对象本身业务处理分离可以,降低系统的耦合度,两者修改时容易。
<2>只需要传入一个正确的参数,就可以获取你所需要的对象,而无须知道其创建细节。
<3>实际开发中,还可以在调用时将所传入的参数保存在XML等格式的配置文件中,修改参数时无须修改任何Java源代码
2.缺点方面
<1>工厂类的职责相对过重,增加新的产品需要修改工厂类的判断逻辑,违背开闭原则。
<2>由于工厂类集中了所有产品创建逻辑,一旦不能正常工作,整个系统都要受到影响。
五、模式适用范围
<1>设计所需的具体产品对象较少时。
<2>需要分离对象的创建与使用时。