随笔 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.如何创建一个对象 常规的对象创建方法: 这样的创建对象没有任何问题, ...
随机推荐
- 12. Min Stack【medium】
Implement a stack with min() function, which will return the smallest number in the stack. It should ...
- ZOJ 3635 Cinema in Akiba (第一次组队) 树状数组+二分
Cinema in Akiba Time Limit: 3 Seconds Memory Limit: 65536 KB Cinema in Akiba (CIA) is a small b ...
- js基本知识3
1. 函数 function 函数的声明 函数的 调用 函数的传参 2. 函数返回值 Return 返回结果 返回给函数 Id 函数 function $id(id) { return documen ...
- homebrew 无法安装,提示不能在根目录下使用
sudo chown -R $(whoami) /usr/local 把/use/local的owner換成自己,就有write權限了 whoami就是一個命令,會echo當前登錄用戶的名字.當然你知 ...
- FreeRTOS 计数信号量
以下转载自安富莱电子: http://forum.armfly.com/forum.php 本章节开始讲解 FreeRTOS 任务间的同步和资源共享机制,计数信号量. FreeRTOS 中计数信号量的 ...
- phoenix系统创建语句
CREATE TABLE SYSTEM."CATALOG"( TENANT_ID VARCHAR NULL, TABLE_SCHEM VARCHAR NULL, TABLE_NAM ...
- java向MySQL插入当前时间的四种方式和java时间日期格式化的几种方法(案例说明)
转载地址:http://www.devba.com/index.php/archives/4581.html java向MySQL插入当前时间的四种方式和java时间日期格式化的几种方法(案例说明); ...
- android版本号始终为1
之前用Eclipse里时,版本号是检查是做如下 <manifest xmlns:android="http://schemas.android.com/apk/res/android& ...
- [kernel]内核日志及printk结构分析
一直都知道内核printk分级机制,但是没有去了解过,前段时间和一个同事聊到开机启动打印太多,只需要设置一下等级即可:另外今天看驱动源码,也看到类似于Printk(KERN_ERR "... ...
- exec系列函数(execl,execlp,execle,execv,execvp)使用
本节目标: exec替换进程映像 exec关联函数组(execl.execlp.execle.execv.execvp) 一,exec替换进程映像 在进程的创建上Unix采用了一个独特的方法,它将进程 ...