随笔 javascript-抽象工厂模式
javascript-抽象工厂模式
抽象工厂模式笔记
1.抽象工厂模式创建多个抽象类,创建出的结果是一个类簇(这里是抽象类的集合)
2.抽象工厂中传入的父类是否是抽象工厂方法创建的抽象类进行判断,不是则抛出错误
3.子类通过抽象工厂方法(寄生式继承)继承父类(抽象工厂创建的抽象类)的属性和方法
原型式继承

1 function inheritobject(o){
2 //声明一个过渡函数对象
3 function F(){
4 }
5 //过渡原型对象继承父对象
6 F.prototype=o;
7 //返回过渡对象的一个实列,该实例的原型继承了父对象
8 return new F();
9 }

寄生式继承 继承原型

1 /*
2 *寄生式继承 继承原型
3 * 传递参数subclass 子类
4 * 传递参数superclass 父类
5 * */
6 function inheritPrototype(subclass,superclass){
7 //复制一份父类的原型副本保存在变量中
8 var p=inheritobject(superclass.prototype);
9 //修正因为重写子类原型导致子类的constructor属性被修改
10 p.constructor=subclass;
11 //设置子类原型
12 subclass.prototype=p;
13 }

抽象工厂方法

1 //抽象工厂方法
2 var VehicleFactory=function(subtype,supertype){
3 //supertype通过typeof判断是否是抽象工厂模式创建的抽象类
4 if(typeof VehicleFactory[supertype] === 'function'){
5 inheritPrototype(subtype,supertype);
6 }else{
7 throw new Error('未创建该抽象类');
8 }
9 }

抽象工厂方法创建抽象类

1 VehicleFactory.Car=function(){
2 this.type='car';
3 }
4
5 VehicleFactory.Car.prototype={
6 getPrice:function(){
7 return new Error("抽象方法不能调用");
8 },
9 getSpeed:function(){
10 return new Error("抽象方法不能调用");
11 },
12 getColor:function(){
13 return new Error("抽象方法不能调用");
14 }
15 }
16
17 VehicleFactory.Bus=function(){
18 this.type='bus';
19 }
20 VehicleFactory.Bus.prototype={
21 getPrice:function(){
22 return new Error("抽象方法不能调用");
23 },
24 getSpeed:function(){
25 return new Error("抽象方法不能调用");
26 }
27 }

宝马汽车子类

1 var BMW =function(price,speed){
2 this.price=price;
3 this.speed=speed;
4 }
5 //抽象工厂实现对Car抽象类 的继承
6 VehicleFactory(BMW,'Car');
7 BMW.prototype.getPrice = function(){
8 return this.price;
9 }
10 BMW.prototype.getSpeed = function(){
11 return this.speed;
12 }

测试代码
1 var BMWObject = new BMW(100,100);
2 console.log(BMWObject.getPrice());
3 console.log(BMWObject.getColor());
随笔 javascript-抽象工厂模式的更多相关文章
- javascript抽象工厂模式
<!doctype html><html lang="en"><head> <meta charset="UTF-8" ...
- [设计模式] javascript 之 抽象工厂模式
抽象工厂模式说明 1. 工厂方法模式的问题: 在工厂方法模式里,创建类都需要通过 工厂类,如果要扩展程序,就必须修改工厂类,这违背了闭包原则,对扩展开放,对修改关闭:对于设计有一定的问题. 2. 如何 ...
- 再起航,我的学习笔记之JavaScript设计模式06(抽象工厂模式)
我的学习笔记是根据我的学习情况来定期更新的,预计2-3天更新一章,主要是给大家分享一下,我所学到的知识,如果有什么错误请在评论中指点出来,我一定虚心接受,那么废话不多说开始我们今天的学习分享吧! 前两 ...
- 再起航,我的学习笔记之JavaScript设计模式07(抽象工厂模式)
我的学习笔记是根据我的学习情况来定期更新的,预计2-3天更新一章,主要是给大家分享一下,我所学到的知识,如果有什么错误请在评论中指点出来,我一定虚心接受,那么废话不多说开始我们今天的学习分享吧! 前两 ...
- javascript设计模式-抽象工厂模式
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 结合实例分析简单工厂模式&工厂方法模式&抽象工厂模式的区别
之前写过一篇关于工厂模式(Factory Pattern)的随笔,里面分析了简单工厂模式,但对于工厂方法和抽象工厂的分析较为简略.这里重新分析分析三者的区别,工厂模式是java设计模式中比较简单的一个 ...
- 简单工厂模式&工厂方法模式&抽象工厂模式的区别
之前写过一篇关于工厂模式(Factory Pattern)的随笔,里面分析了简单工厂模式,但对于工厂方法和抽象工厂的分析较为简略.这里重新分析分析三者的区别,工厂模式是java设计模式中比较简单的一个 ...
- PHP设计模式(三)抽象工厂模式(Abstract Factory For PHP)
一.什么是抽象工厂模式 抽象工厂模式的用意为:给客户端提供一个接口,可以创建多个产品族中的产品对象 ,而且使用抽象工厂模式还要满足以下条件: 系统中有多个产品族,而系统一次只可能消费其中一族产品. 同 ...
- 面向对象设计模式纵横谈:Abstract Factory 抽象工厂模式(笔记记录)
今天是设计模式的第二讲,抽象工厂的设计模式,我们还是延续老办法,一步一步的.演变的来讲,先来看看一个对象创建的问题. 1.如何创建一个对象 常规的对象创建方法: 这样的创建对象没有任何问题, ...
随机推荐
- wifi免密码登录认证流程
您查询的关键词是:weixin:,qrgex_zm- 以下是该网页在北京时间 2016年03月27日 02:46:42 的快照: 如果打开速度慢,可以尝试快速版:如果想保存快照,可以添加到搜藏:如果想 ...
- python学习笔记(5)--泡菜:永久存储
说明: 1. 导入pickle泡菜模块. 2. wb方式(二进制)创建.pkl文件. 3. pickle.dump把一个数组或什么数据灌进这个新建的文件. 4. 然后就生成了一个pkl文件,用来存放数 ...
- R ggplot2 翻转坐标
p <- ggplot(mpg, aes(class, hwy)) p + geom_boxplot() p + geom_boxplot() + coord_flip()
- Windows Phone 修改系统定义的资源颜色
[问题的背景] 相信有些经验的WP研发同学都会遇到下面的问题: 系统控件以及WPToolkit中大量使用了PhoneAccentBrush这个画刷(这个画刷定义的是系统的强调色,即用户选择的主题颜色) ...
- android4.0.3源码之USB wifi移植心得
http://blog.csdn.net/eastmoon502136/article/details/7850157 http://forum.cubietech.com/forum.php?mod ...
- 重启oracle方法一二三
startup nomount alter database mount alter database open Linux:方法1 用root以ssh登录到linux,打开终端输入以下命令: cd ...
- 使用OpenFace进行人脸识别(1)
http://www.chinacloud.cn/show.aspx?id=25992&cid=12 本文中,笔者将介绍OpenFace中实现人脸识别的pipeline,这个pipeline可 ...
- TensorFlow基础笔记(4) Tensor Transformation
https://segmentfault.com/a/1190000008793389 抽取 tf.slice(input_, begin, size, name=None):按照指定的下标范围抽取连 ...
- Unity3d优化总结1
优化内容 包括: 1.代码方面: 2.函数使用方面: 3.ngui注意方面: 4.数学运算方面: 5.内存方面: 6.垃圾回收方面 等等... 1. 尽量避免每帧处理,可以每隔几帧处理一次 比如: ...
- C语言若干知识点归记
一.C语言指针学习架构 1.基本数据类型---指针 2.字符串---指针 3.数组---指针 4.函数---指针 5.结构体---指针 6.共用体---指针 7.枚举---指针 8.位域---指针 9 ...