抽象工厂模式

抽象工厂模式是指提供创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。抽象工厂模式实际上就是在工厂方法模式上更进一步的加强了工厂的功能。

抽象工厂模式示例

我们假设一个文具厂生产两种套装,笔A和橡皮A,笔B和橡皮B。我们使用两个工厂分别生产套装A和套装B。

Eraser.java

public abstract class Eraser {}

EraserA.java

public class EraserA extends Eraser {}

EraserB.java

public class EraserB extends Eraser {}

Pen.java

public abstract class Pen {}

PenA.java

public class PenA extends Pen {}

PenB.java

public class PenB extends Pen {}

Factory.java

public interface Factory {
    public Pen producePen();
    public Eraser produceEraser();
}

SuitAFactory.java

public class SuitAFactory implements Factory {
    @Override
    public Pen producePen() {
        return new PenA();
    }

    @Override
    public Eraser produceEraser() {
        return new EraserA();
    }
}

SuitBFactory.java

public class SuitBFactory implements Factory {
    @Override
    public Pen producePen() {
        return new PenB();
    }

    @Override
    public Eraser produceEraser() {
        return new EraserB();
    }
}

Main.java

public class Main {
    public static void main(String[] args) {
        Factory factoryA = new SuitAFactory();
        factoryA.producePen();
        factoryA.produceEraser();

        Factory factoryB = new SuitBFactory();
        factoryB.producePen();
        factoryB.produceEraser();
    }
}

从用户的角度看抽象工厂,使用抽象工厂还是十分方便的,用户需要生产套装A,只要实例化工厂A就能解决所有问题。

实际上,工厂模式是可以灵活使用的,而不是一定要区分工厂方法模式还是抽象工厂模式,有时使用的工厂方法模式随着需求变动就修改成了抽象工厂模式,甚至为了方便我们还可以结合反射API使用。各式各样的方法最终目的都是解耦,编码时不必在意究竟用的是什么设计模式。

作者:Gacfox
版权声明:本网站为非盈利性质,文章如非特殊说明均为原创,版权遵循知识共享协议CC BY-NC-ND 4.0进行授权,转载必须署名,禁止用于商业目的或演绎修改后转载。
Copyright © 2017-2024 Gacfox All Rights Reserved.
Build with NextJS | Sitemap