「这是我参与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();
}
}
如果我们要新增套装B,只需新增键盘B,鼠标B,生产B套装的工厂,即可获得B套装,不需要修改先前的代码,符合开闭原则。
三、总结
抽象工厂模式包括工厂模式的优点。此外,抽象工厂模式可以方便的新增一个产品族(此处是套装)。比如新增一款键鼠C套装非常方便。
缺点是如果一套产品种新增一类产品时,比如键鼠套装新增鼠标垫,这个时候所有的工厂相关的代码都要进行修改。