工厂模式(Factory Pattern)

抽象工厂模式(Abstract Factory Pattern)

工厂模式是JAVA中最常用的设计模式之一,属于创建型模式。

介绍

需求:封装创建逻辑。主要针对于复杂对象的初始化。(个人认为是对复杂对象初始化逻辑进行抽取)
关键代码:创建一个工厂类,封装一个函数并返回实例(Factory::getInstance)。

实现类型

class A {}
class B extends A {}
class C extends A {}

1 简单工厂:

public class Factory {
    public [static] A getInstance() {return new A();}
    
    public [static] B getInstance() {return new B();}
}

2 复杂工厂:

public class Factory {
    public [static] A getInstance(String code) {
        switch (code) {
            case "A":
                return new A();
                break;
            case "B":
                return new B();
                break;
            case "C":
                return new C();
                break;
            default: 
        }
    }
}

3 抽象简单工厂:本质与1 简单工厂无差别,主要是强调返回实例向上造型

public Factory {
    public [static] A getInstance() {return new A()};
 
    public [static] A getInstance() {return new B()};  // B 向上造型为 A
}

4 抽象复杂工厂:

public abstract class Factory {
   public abstract A getInstance();
}

public class BFactory extends Factory {
    public A getInstance() { return new B(); }
}
public class CFactory extends Factory {
    public A getInstance() { return new C(); }
}

以上分类,本质是以待生产的实例[例中A、B、C]是否需要向上造型来区分是否为抽象工厂。

假设需要添加 public class D extends A {} 时,以上四种类型是如何实现扩展的?
1【简单工厂】 添加新的方法,违背开闭原则,扩展性差。
2【复杂工厂】添加 “D” 判断,违背开闭原则,扩展性差。
3【抽象简单工厂】 同 1【简单工厂】,扩展性差。
4【抽象复杂工厂】实现 DFactory即可,并且 DFactory 与 原两个工厂类都可以向上造型为Factory,扩展性好。

以上为个人理解,理解错误之处请帮忙指正,多谢!


roylion
204 声望25 粉丝

读书破万卷