抽象工厂模式浅谈

186 阅读2分钟

「这是我参与2022首次更文挑战的第12天,活动详情查看:2022首次更文挑战」。

一、什么是抽象工厂模式

工厂模式是一个工厂只生产一类产品,而抽象模式是一个工厂可以生产多个种类的产品,这些产品是组合在一起的,比如生产键鼠套装的抽象工厂,它的一类产品是键盘,另一类产品是鼠标,此外还可以包括鼠标垫。工厂模式是一个工厂生产一类产品,比如狗狗工厂,只生产狗狗。

总结起来就是抽象工厂可以生产多类产品(多类产品组合,就像qq的换肤时qq的各个地方的皮肤整体都更换了),一类产品就是鼠标A,鼠标B等,另一类的产品如键盘A,键盘B。键盘A和鼠标A构成一个套装,即键鼠抽象工厂的产品族。

抽象工厂模式与工厂模式的区别是,工厂模式只生产一类产品,而抽象工厂模式可以生产多类产品。

二、抽象工厂模式的实现

public interface Mouse {
    void move();
}

抽象产品鼠标

public interface Keyboard {
    void strike();
}

抽象产品键盘

public class MouseA implements Mouse{
    @Override
    public void move() {
        System.out.println("move MouseA");
    }
}

鼠标的具体产品A

public class KeyboardA implements Keyboard{
    @Override
    public void strike() {
        System.out.println("strike KeyboardA");
    }
}

键盘的具体产品A

public interface KeyboardAndMouseFactory {
    Keyboard getKeyboard();

    Mouse getMouse();
}

生产键鼠套装的抽象工厂。

public class ASuitFactory implements KeyboardAndMouseFactory{
    @Override
    public Keyboard getKeyboard() {
        return new KeyboardA();
    }

    @Override
    public Mouse getMouse() {
        return new MouseA();
    }
}

生产简述套装A的具体工厂。

public class AbstractFactoryTest {
    public static void main(String[] args) {
        KeyboardAndMouseFactory factory = new ASuitFactory();
        Keyboard keyboard = factory.getKeyboard();
        keyboard.strike();
        Mouse mouse = factory.getMouse();
        mouse.move();
    }
}

image.png 如果我们要新增套装B,只需新增键盘B,鼠标B,生产B套装的工厂,即可获得B套装,不需要修改先前的代码,符合开闭原则。

三、总结

抽象工厂模式包括工厂模式的优点。此外,抽象工厂模式可以方便的新增一个产品族(此处是套装)。比如新增一款键鼠C套装非常方便。

缺点是如果一套产品种新增一类产品时,比如键鼠套装新增鼠标垫,这个时候所有的工厂相关的代码都要进行修改。