抽象工厂模式

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

抽象类

JavaScript 中 abstract 还是保留字,虽然不像传统面向对象创建,之前Dart就有此类方法,(语言相通性)。

var Car = function(){};
Car.prototype = {getPrice:function(){return new Error("抽象方法不可以调用")},getSpeed:function(){return new Error("抽象方法不能调用")}
}

创建时没有任何属性,而原型prototype上的方法也不能直接使用,会报错。但是在一些大型的应用中,总有一些子类去继承另一些父类,这些父类经常会定义一些必要的方法,却没有具体实现,如Car中的getPrice和getSpeed,那么一旦创建了一个对象,该对象总是具备一些必备的方法,但是这些必要的方法从父类继承过来而没有具体去重写实现,就会报个友好的错误,return new Error(),需要重写父类方法。

抽象工厂函数

抽象函数定义的方法只是显性地定义一些方法和功能,但是没有具体的实现,而一个对象是要有一套完整的功能,使用用抽象类创建的对象当然也是抽象的。

// 抽象工厂方法
var VehicleFactory = function(subType,superType){//判断抽象工厂中是否含有抽象类if(typeof VehicleFactory[superType]==='function'){//缓存类function F(){};F.prototype = new VehicleFactory[superType]();//将子类的constructor指向子类subType.constructor = subType;//子类原型继承父类   new 的作用过度类不仅继承父类的原型方法,还要继承父类的原型方法subType.prototype = new F()}else{throw new Error('未创建该抽象类')}
}//小汽车的抽象类
VehicleFactory.Car = function(){this.type = 'car'
}
VehicleFactory.Car.prototype = {getPrice:function(){return new Error('抽象方法不能调用')},getSpeed:function(){return new Error('抽象方法不能调用')}
};//公交车抽象类
VehicleFactory.Bus = function(){this,type = 'bus'
}
VehicleFactory.Bus.prototype = {getPrice:function(){return new Error('抽象方法不能调用')},getSpeed:function(){return new Error('抽象方法不能调用')}
};//货车抽象类
VehicleFactory.Truck = function(){this,type = 'truck'
}
VehicleFactory.Truck.prototype = {getPrice:function(){return new Error('抽象方法不能调用')},getSpeed:function(){return new Error('抽象方法不能调用')}
};// -------------------------使用----------------------------// 宝马汽车子类
var BMW = function(price,speed){this.price = price;this.speed = speed;
}
VehicleFactory(BMW,'Car')
BMW.prototype.getPrice = function(){return this.price
}
BMW.prototype.getSpeed = function(){return this.speed
}// 宇通公交子类
var YUTONG = function(price,speed){this.price = price;this.speed = speed;
}
VehicleFactory(YUTONG,'Bus')
YUTONG.prototype.getPrice = function(){return this.price
}
YUTONG.prototype.getSpeed = function(){return this.speed
}// 实例化
var bmw = new BMW(1000000,10000);
console.log(bmw.getPrice()) //1000000
console.log(bmw.type) //car

通过抽象工厂就能知道每个子类到底是哪一类类别的,然后他们具备了该类的所必备的属性和方法。

《JavaScript设计模式》笔记 之 抽象工厂模式相关推荐

  1. 【设计模式笔记】抽象工厂模式

    围绕一个超级工厂创建其他工厂.该超级工厂又称为其他工厂的工厂. 提供了一种创建对象的最佳方式. 在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显示指定它们的类. 每个生成的工厂都能按照工厂 ...

  2. 设计模式笔记之三抽象工厂模式

    抽象工厂模式 为什么引入抽象工厂模式? 一个接口代表一系列操作,当我们需要的对象需要多个接口,而这些接口又是不相干的,同时对于类的创建我们不需要知道具体的实现细节,只需要知道某个特征就可以,虽然工厂方 ...

  3. JavaScript 23 种设计模式之 4 抽象工厂模式

    JavaScript 23 种设计模式之 4 抽象工厂模式 概念与特点 结构与实现 应用场景 应用实例 总结 概念与特点 概念: 提供一组相关或相互依赖对象的接口.抽象工厂模式是工厂方法模式的升级版, ...

  4. 设计模式C#描述——抽象工厂模式

    设计模式C#描述--抽象工厂模式 阅读此文应先阅读简单工厂模式与工厂方法模式 抽象工厂模式是对象的创建模式,它是工厂方法模式的进一步推广. 假设一个子系统需要一些产品对象,而这些产品又属于一个以上的产 ...

  5. 设计模式二、抽象工厂模式

    设计模式part2 1.     抽象工厂模式 工厂方法模式有一个问题就是,类的创建依赖工厂类,也就是说,如果想要拓展程序,必须对工厂类进行修改,这违背了闭包原则,所以,从设计角度考虑,有一定的问题, ...

  6. 设计模式普及之抽象工厂模式

    本文是读<Android源码设计模式解析与实战>后笔记 抽象工厂的定义 为创建一组相关或者是相互依赖的对象提供一个借口,而不需要指定它们的具体类. 抽象工厂的使用场景 一个对象族有相同的约 ...

  7. 【设计模式】之抽象工厂模式

    创造性设计模式 创造型模式主要是为了实例化类所用.进一步又分为类创建.对象创建模式. 类创建模式 类创建模式主要基于继承方式进行实例化 对象创建模式 对象创建模式主要基于委托机制进行实例化 Abstr ...

  8. java抽象工厂模式实例_Java设计模式百例 - 抽象工厂模式

    抽象工厂模式是在工厂方法模式之上的有一次升级,以便能够处理更加复杂的对象创建场景.因此也是所有形态的工厂模式中最为抽象和最具一般性的一种形态. 有朋友可能会想了,工厂方法模式已经是对简单工厂模式的具体 ...

  9. java设计模式六(抽象工厂模式)

    java设计模式-抽象工厂模式 一.概述 抽象工厂模式是在工厂模式的基础上,加上了一个管理工厂的超级工厂.也就是说,工厂的作用是管理各种有相似功能的类,而超级工厂的作用是管理这些工厂. 二.模式示例: ...

最新文章

  1. iOS控件之UILabel
  2. 【Paper】2018_多无人机协同编队控制算法研究_林倩玉
  3. 算法—详细讲解单向链表的实现(python)
  4. CodeForces 839D - Winter is here | Codeforces Round #428 (Div. 2)
  5. hdu1196 Lowest Bit
  6. jsp页面页面post传值_几种JSP页面传值方式
  7. 开发者福音!面向Web场景的云开发服务正式开放!
  8. django mysql filter_Django filter中用contains 在mysql中的问题
  9. 如何在不重新加载页面的情况下修改URL?
  10. python tkinter grid布局
  11. 基于字典的超分辨率实现的各种方法
  12. 浅复制和深复制的区别?//浅拷贝和深拷贝
  13. 阿里巴巴与山东省人民政府签署战略合作协议
  14. 【转载】关于文献阅读和科研选题
  15. Idea多次启动同一个服务
  16. KB927917解决方法
  17. 全面发展还是术业专攻?这就是答案
  18. 跨境网络赌博“易倍”被端 赌资21亿元均进入第三方支付后“漂白”
  19. 【Adobe 】Adobe Photoshop2022特别版推荐
  20. 林仕鼎:架构设计的一些思考

热门文章

  1. EDW on Hadoop(Hadoop上的数据仓库)技术选型和实践思考
  2. EDW项目中ODS源接口表清单维护方案
  3. php小程序的wxparse.js是什么,微信小程序解析html代码(wxParse工具)
  4. Android 图像压缩
  5. Python中MNE库进行PSD分析(计算不同频率区间的累加和)
  6. 新世纪电子商务淘金模式
  7. python 数据类型转换 及 字符串 转int 报错处理
  8. python 语言基础 - 你不得不知道的字符串常用函数之lowerupper
  9. 使用python做周期财务统计可视化!
  10. ubuntu防火墙常用命令