抽象工厂模式
理解设计模式(一)——简单工厂 理解设计模式(二)——工厂方法写在前面
之前已经讲了简单工厂模式和工厂方法模式,两者都是为了解决一些创建对象上的问题而产生的(简单来说就是能使用字符串指定具体创建的对象的类)。那么,抽象工厂模式又是为了解决什么问题而诞生的?
问题
我们创建对象时,有时候对象是成对出现的。比如,创建一把枪的对象,我们可能就要创建对应的子弹对象。枪的类型改变,子弹的类型也就跟着一起改变。
如果使用简单工厂或者工厂方法,我们只能创建两个工厂,分别创建两个对象。当要创建对象发生改变时,需要同时对这两个对象分别进行修改(因为他们是成对出现的)。
解决方法
要实现两个/多个对象同时改变,只需要在工厂里指明要创建的两个/多个对象所共有的属性。比如说,戴尔工厂生产戴尔的鼠标和键盘,惠普工厂生产惠普的鼠标和键盘。那么我们只要固定让戴尔工厂返回戴尔的对象,惠普返回惠普的对象,在程序中使用时,只需要指定要生产的是戴尔还是惠普就可以。
示例代码如下:class AbstractFactory {
getMouse() {}
getKeyBoard() {}
}
class DellFactory {
getMouse() {return new DellMouse();}
getKeyBoard() {return new DellKeyBorad;}
}
class HPFactory {
getMouse() {return new HPMouse();}
getKeyBoard() {return new HPKeyBoard();}
}
let factory = getFactory("Dell") // 使用反射机制,或者简单工厂,根据字符串获取对应的工厂
let mouse = factory.getMouse();
let keyboard = factory.getKeyBoard();
总结
抽象工厂模式是为了实现指定一个类别,就能生产一系列具有联系的对象。往往当要创建的一系列对象是同时发生变化时,可以使用抽象工厂模式。