Javascript设计模式(三)-- 抽象工厂模式

 2023-09-10 阅读 16 评论 0

摘要:抽象工厂模式:通过对类的工厂抽象使其业务用于对产品类簇的创建,而不负责创建某一类产品的实例。 抽象类 //测试抽象类,使用其实例方法时会抛出错误 var test = function(){}; test.prototype = {getFirst:function(){return new Error('抽象

抽象工厂模式:通过对类的工厂抽象使其业务用于对产品类簇的创建,而不负责创建某一类产品的实例

抽象类

//测试抽象类,使用其实例方法时会抛出错误
var test = function(){};
test.prototype = {getFirst:function(){return new Error('抽象方法不可调用');},getSecond:function(){return new Error('抽象方法不可调用!');}
};

在上面的代码中,test类什么都不能做,创建时没有任何属性,原型上的方法也不能使用。但是在继承上是很有用的,因为定义了一种类,并定义了其方法,如果在子类中重写其方法,就不会出现报错。

但是如果必要的方法从父类中继承过来而没有去具体去重写实现,那么实例化对象会调用父类中的方法。如果父类中有提示的话,是非常有帮助的。这就是抽象类的作用所在。

抽象工厂模式

var myTest = function(subType,superType){//判断抽象工厂中是否有该抽象类if(typeof myTest[superType] === 'function'){//缓存类function F(){};//继承父类的方法和属性F.prototype = new myTest[superType]();//将子类constructor指向子类subType.constructor = subType;//子类原型继承“父类”subType.prototype = new F();}else{//不存在该抽象类抛出错误throw new Error("未创建抽象类!!!");}
}
myTest.first = function(){this.type = 'first';};myTest.first.prototype = {getFirst:function(){return new Error('抽象方法不可调用');},getSecond:function(){return new Error('抽象方法不可调用!');}};myTest.second = function(){this.type = 'second';};myTest.second.prototype = {getFirst:function(){return new Error('抽象方法不可调用');},getSecond:function(){return new Error('抽象方法不可调用!');}};

抽象工厂其实是一个实现子类继承父类的方法,在这个方法中要通过传递子类以及要继承父类(抽象类)的名称,并在抽象工厂方法中又增加了一次对抽象类存在性的一次判断,如果存在,就会继承父类的方法。

注意:在对过渡类的原型继承时,不是继承父类的原型,而是通过new关键字复制父类的一个实例。因为不仅仅要继承父类的原型方法,更要继承父类的对象属性。

实现

抽象工厂模式满足什么原则、一个测试用例,展示继承的使用

//第一个测试子类var firstTest = function(firstParameter,secondParameter){this.firstParameter = firstParameter;this.secondParameter = secondParameter;};//抽象工厂实现对test抽象类的继承myTest(firstTest,'test');firstTest.prototype.getFirst = function(){return this.firstParameter;}firstTest.prototype.getSecond = function(){return this.secondParameter;}

总结

抽象工厂模式是设计模式中最抽象的一个,也是唯一一种抽象化创建模式。创建出来的不是一个真正的对象实例,而是一个类簇,它制定了类的结构,区别于简单工厂模式创建单一对象工厂方法模式创建多类对象。由于Javascript不支持抽象化创建与虚拟方法,应用不太广泛。

 

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/1/35656.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息