随笔 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.如何创建一个对象 常规的对象创建方法: 这样的创建对象没有任何问题, ...
随机推荐
- cnblogs博客迁移到hexo
cnblogs博客备份 备份地址:https://i.cnblogs.com/BlogBackup.aspx?type=1 备份文件为xml格式,打开备份文件,如下所示: <?xml versi ...
- 在编写JSP的时候出现XXX cannot be resolved to a type
今天遇到这个情况,却发现是eclipse抽风,说javax.servlet.http.Cookie找不到定义,但是经过浏览器测试,可以运行,而JSP源文件中eclipse死活要报错.表示无语. 关于e ...
- 网页尺寸offsetHeight,offsetWidth
网页尺寸offsetHeight offsetHeight和offsetWidth,获取网页内容高度和宽度(包括滚动条等边线,会随窗口的显示大小改变). 一.值 offsetHeight = clie ...
- [Linux内核]软中断与硬中断
转自:http://blog.csdn.net/zhangskd/article/details/21992933 本文主要内容:硬中断 / 软中断的原理和实现 内核版本:2.6.37 Author: ...
- linux -- camera shot 拍照功能
#include <stdio.h> #include <string.h> #include <errno.h> #include <stdlib.h> ...
- finals的使用
//----------------------------------------Finals--------------------------- public class Finals { pu ...
- android jni log
在编写的jni时,经常需要输出打印信息进行调试,而C中printf在jni中没有效果,这时就需要使用NDK提供的函数. 1. jni中包含头文件 #include <android/log.h& ...
- 深入理解Mybatis中sqlSessionFactory机制原理
对于任何框架而言,在使用前都要进行一系列的初始化,MyBatis也不例外.本章将通过以下几点详细介绍MyBatis的初始化过程. 1.MyBatis的初始化做了什么 2. MyBatis基于XML配置 ...
- OAuth认证协议原理分析及同步消息到Twitter和Facebook使用方法
OAuth有什么用?为什么要使用OAuth? twitter或豆瓣用户一定会发现,有时候,在别的网站,点登录后转到 twitter登录,之后转回原网站,你会发现你已经登录此网站了,这种网站就是这个效果 ...
- 将数据写入TXT文件中,file_put_contents与fwrite
<?php header("content-type:text/html;charset=utf-8"); $file = './aa.txt'; ###判断是不是文件 if ...