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-抽象工厂模式的更多相关文章

  1. javascript抽象工厂模式

    <!doctype html><html lang="en"><head> <meta charset="UTF-8" ...

  2. [设计模式] javascript 之 抽象工厂模式

    抽象工厂模式说明 1. 工厂方法模式的问题: 在工厂方法模式里,创建类都需要通过 工厂类,如果要扩展程序,就必须修改工厂类,这违背了闭包原则,对扩展开放,对修改关闭:对于设计有一定的问题. 2. 如何 ...

  3. 再起航,我的学习笔记之JavaScript设计模式06(抽象工厂模式)

    我的学习笔记是根据我的学习情况来定期更新的,预计2-3天更新一章,主要是给大家分享一下,我所学到的知识,如果有什么错误请在评论中指点出来,我一定虚心接受,那么废话不多说开始我们今天的学习分享吧! 前两 ...

  4. 再起航,我的学习笔记之JavaScript设计模式07(抽象工厂模式)

    我的学习笔记是根据我的学习情况来定期更新的,预计2-3天更新一章,主要是给大家分享一下,我所学到的知识,如果有什么错误请在评论中指点出来,我一定虚心接受,那么废话不多说开始我们今天的学习分享吧! 前两 ...

  5. javascript设计模式-抽象工厂模式

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. 结合实例分析简单工厂模式&工厂方法模式&抽象工厂模式的区别

    之前写过一篇关于工厂模式(Factory Pattern)的随笔,里面分析了简单工厂模式,但对于工厂方法和抽象工厂的分析较为简略.这里重新分析分析三者的区别,工厂模式是java设计模式中比较简单的一个 ...

  7. 简单工厂模式&工厂方法模式&抽象工厂模式的区别

    之前写过一篇关于工厂模式(Factory Pattern)的随笔,里面分析了简单工厂模式,但对于工厂方法和抽象工厂的分析较为简略.这里重新分析分析三者的区别,工厂模式是java设计模式中比较简单的一个 ...

  8. PHP设计模式(三)抽象工厂模式(Abstract Factory For PHP)

    一.什么是抽象工厂模式 抽象工厂模式的用意为:给客户端提供一个接口,可以创建多个产品族中的产品对象 ,而且使用抽象工厂模式还要满足以下条件: 系统中有多个产品族,而系统一次只可能消费其中一族产品. 同 ...

  9. 面向对象设计模式纵横谈:Abstract Factory 抽象工厂模式(笔记记录)

         今天是设计模式的第二讲,抽象工厂的设计模式,我们还是延续老办法,一步一步的.演变的来讲,先来看看一个对象创建的问题. 1.如何创建一个对象 常规的对象创建方法: 这样的创建对象没有任何问题, ...

随机推荐

  1. 每日英语:Do Successful People Need Sleep?

    George Washington and his Revolutionary War victories. Robert Frost and the composition of 'Stopping ...

  2. Parallelism , Partitioner

    转:spark通过合理设置spark.default.parallelism参数提高执行效率 spark中有partition的概念(和slice是同一个概念,在spark1.2中官网已经做出了说明) ...

  3. phpadmin 装了6666端口只能在IE打开,在阿里云改了 开放端口85好了

    phpadmin 装了6666端口只能在IE打开,在阿里云改了 开放端口85好了 非常用端口谷歌浏览器识别不了phpadmin

  4. Reveal Jquery 模式对话框插件

    /* * jQuery Reveal Plugin 1.0 * www.ZURB.com * Copyright 2010, ZURB * Free to use under the MIT lice ...

  5. 关于Unity中调试C#的方法

    1.断点输出语句 在感觉有问题的地方的上下文写一些输出语句,如果控制台只有输出上文,没有输出下文,那么可以知道,上下文之间的语句有问题,因为下文没执行到,没有输出语句. Debug.Log(" ...

  6. bootstrap基础学习一篇

    官网:http://www.bootcss.com/ 这里,主要讲解bootstrap3.关于他的介绍就不用复述了. 1.示例 <!doctype html> <html lang= ...

  7. 配置gosublime

    Installation Sublime Package Control allows you to easily install or remove GoSublime (and many othe ...

  8. Spring_day03--Spring的事务管理

    Spring的事务管理 事务概念 1 什么事务 事务是操作中最基本的单元,表示一组操作要么都成功,有一个失败那么所有都失败. 2 事务特性 原子性 一致性 隔离性 持久性 3 不考虑隔离性产生读问题 ...

  9. 如何用C语言读写文件

    #include "stdio.h"#include <stdlib.h> main(){ FILE *fp1;//定义文件流指针,用于打开读取的文件 FILE *fp ...

  10. Oracle中select使用别名

    1 .将字段用as转换成别名. 2 .直接在字段的名字后面跟别名. 3 .在字段后面用双引号引起的别名.   我的朋友 大鬼不动 最近访客 fhwlj kochiyas 大極星 Alz__ deser ...