【JS设计模式】温习简单工厂模式、工厂方法模式、抽象工厂模式概念
注:空心箭头表示的是种继承关系,工厂类和产品类之间是一种依赖关系。是用箭头加虚线表示的,以下的模型图是用的实线是不正确(时间不够用,在这里我偷懒了。这个习惯不好,呵呵)
简单工厂模式(Simple Factory Pattern):
使用一个类(通常为单体)来创建实例;简单工厂模式也叫静态工厂方法模式(Static FactoryMethod Pattern).
接口的定义通常是以I开头标识符,在JS中未定义接口或抽象类的语法;
var MacBikeFactory = { createBike : function() { return new MacBike(); } } function IMacBike() {} function MacBike() {} MacBike.prototype = { constructor : MacBike, getBike: function() { console.log("创建一台Mac车"); } } var macFn = MacBikeFactory.createBike(); macFn.getBike();
工厂方法模式
使用子类来决定一个成员变量应该是哪个详细的类的实例
function IMacBikeFactory() {} function MacBikeFactory() { this.createBike() { return new MacBike(); } } function IMacBike() {} function MacBike() {} MacBike.prototype = { constructor : MacBike, getBike: function() { console.log("创建一台Mac车"); } } var macBikeFactory = new MacBikeFactory(); var macBike = IMacBikeFactory.createBike(); macBike.getBike();
在简单工厂模式中是通过一个单体来实例化一个详细产品,而在工厂方法模式中是把这个实例化的过程交给了抽象工厂的子类来创建的
抽象工厂模式
多个抽象产品类,每一个抽象产品类能够派生出多个详细产品类。
一个抽象工厂类,能够派生出多个详细工厂类。
每一个详细工厂类能够创建多个详细产品类的实例。
一个抽象工厂类,能够派生出多个详细工厂类。
每一个详细工厂类能够创建多个详细产品类的实例。
有二个抽象产品IBike和ICar类,它们分别派生二个详细产品
有一个IMall抽象工厂类,它派生出二个详细工厂AMall和BMall类
每一个详细工厂类又能够创建多个详细产品实例 AMall卖场销售BaoMa品牌的汽车和FengHuang品牌的自行车;BMall卖场销售FaLali品牌的汽车和JieAnTe品牌的自行车