工厂模式——JavaScript
我理解的设计模式是为了提高代码复用,增强扩展性的代码编写理念,所以无关乎编程语言。JavaSript是我感兴趣的语言,所以使用它来实现。
- 简单工厂(Sample Factory)
又叫静态工厂,用于创建同一类对象。如弹出框分为警告、确认和对话框,它们公共的方法提取出来,不同之处分别处理。
1 function createPop(type,text){ 2 var o = new object(); 3 o.content = text; 4 o.show = function(){ 5 //todo 6 }; 7 8 if(type == 'alert'){ 9 //todo 10 } else if(type == 'conform'){ 11 //todo 12 } else if(type == 'prompt'){ 13 //todo 14 } 15 }
创建一个Alert:var nameAlert = new createPop('alert','请输入姓名!');
- 工厂方法(Factory Method)
工厂方法是将创建对象的方法推迟到子类中。如一个工厂方法可以生产几种食品类。
1 var FoodFactory = function(type,count){ 2 if(this instanceof FoodFactory){ 3 return new this[type](count); 4 } 5 } 6 7 FoodFactory.prototype = { 8 Pie: function(count){ 9 //todo 10 }, 11 Pizza: function(count){ 12 //todo 13 }, 14 Cake: function(count){ 15 //todo 16 } 17 }
- 抽象工厂(Abstract Factory)
抽象类显示定义一些功能,但没有具体实现。子类继承了抽象类还需要实现各个虚方法。就是在其他面向对象语言里的多态,创建子类赋值给父类,好处是调用方式都是一样的,运行时会自动选择子类对应的方法。
如一个汽车的公司有多个品牌,它只负责设计汽车有什么功能,但真正的生产给子公司实现。
1 var VehicleFactory = function(subType,superType){ 2 if(typeof VehicleFactory[superType] === 'function'){ 3 fucntion F(){}; //缓存类 4 F.prototype = new VehicleFactory[super](); 5 subType.constructor = subType; 6 subType.prototype = new F(); 7 } else { 8 throw new Error('未创建该抽象类'); 9 } 10 } 11 12 //抽象类 13 VehicleFactory.Car = function(){ 14 this.type = 'Car'; 15 }; 16 17 VehicleFactory.Car.prototype = { 18 getPrice:function(){ 19 return new Error('抽象方法不能调用'); 20 }, 21 // ... 22 } 23 24 //抽象类 25 VehicleFactory.Truck= function(){ 26 this.type = 'Truck'; 27 }; 28 29 VehicleFactory.Truck.prototype = { 30 getPrice:function(){ 31 return new Error('抽象方法不能调用'); 32 }, 33 // ... 34 } 35 36 //宝马子类 37 var BMW = function(price,speed){ 38 this.price = price; 39 this.speed = speed; 40 }; 41 VehicleFactory(BMW,'Car'); //宝马继承了抽象父类Car,有了一些抽象方法,但是不能使用 42 BMW.prototype.getPrice = function(){ 43 return this.price; 44 } 45 46 //使用 47 var z4 = new BMW(50000); 48 console.log(z4.type); //Car 继承父类Car的属性 49 console.log(z4.getPrice()); //50000 继承父类Car的抽象方法,自己重新实现
抽象工厂做了什么?我们需要一个新的子类时,使用抽象工厂让子类继承对应的一个抽象类,得到一些属性和虚方法,子类再实现这些虚方法,就可以使用了。
参考:
张容铭《JavaScript设计模式》
转载于:https://www.cnblogs.com/feitan/p/5238137.html
工厂模式——JavaScript相关推荐
- JavaScript设计模式--简单工厂模式例子---XHR工厂
JavaScript设计模式--简单工厂模式例子---XHR工厂 第一步,Ajax操作接口(目的是起一个接口检测作用) (1)引入接口文件 //定义一个静态方法来实现接口与实现类的直接检验 //静态方 ...
- javascript 面向对象编程(工厂模式、构造函数模式、原型模式)
javascript 面向对象编程(工厂模式.构造函数模式.原型模式) CreateTime--2018年3月29日17:09:38 Author:Marydon 一.工厂模式 /*** 工厂模式*/ ...
- JavaScript --- [学习笔记]观察者模式 理解对象 工厂模式 构造函数模式
说明 本系列(JS基础梳理)为后面TCP的模拟实现做准备 本篇的主要内容: 观察者模式.工厂模式.构造函数模式 和 对对象的理解 1. 观察者模式 参考JavaScript设计模式 1.1 消息注册方 ...
- JavaScript设计模式-10.工厂模式实例xhr
1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="UTF-8"> 5 < ...
- JavaScript 设计模式核⼼原理与应⽤实践 之 创建型:工厂模式·简单工厂——区分“变与不变”
JavaScript 设计模式核⼼原理与应⽤实践 之 创建型:工厂模式·简单工厂--区分"变与不变" 先来说说构造器 在介绍工厂模式之前,为了辅助大家的理解,我想先在这儿给大家介绍 ...
- JavaScript 设计模式核⼼原理与应⽤实践 之 创建型:工厂模式·抽象工厂——理解“开放封闭”
JavaScript 设计模式核⼼原理与应⽤实践 之 创建型:工厂模式·抽象工厂--理解"开放封闭" 一个不简单的简单工厂引发的命案 在实际的业务中,我们往往面对的复杂度并非数个类 ...
- Javascript设计模式(三)-- 抽象工厂模式
抽象工厂模式:通过对类的工厂抽象使其业务用于对产品类簇的创建,而不负责创建某一类产品的实例. 抽象类 //测试抽象类,使用其实例方法时会抛出错误 var test = function(){}; te ...
- JavaScript设计模式(一)-- 简单工厂模式
定义 简单工厂模式:又叫静态工厂方法,由一个工厂对象决定创建某一种产品对象类的实例.主要用来创建同一类对象. 如果类太多,就提供一个 对于多个类,在每次创建时还要找相对应的类.为此,直接封装在一个函数 ...
- JavaScript学习(四十二)—利用工厂模式创建对象以及工厂模式创建对象的不足
JavaScript学习(四十二)-利用工厂模式创建对象以及工厂模式创建对象的不足 一.利用工厂模式创建对象 工厂模式是JavaScript中的一种设计模式,它的作用是批量创建具有同种属性的对象. 格 ...
最新文章
- 初步了解React Native的新组件库firstBorn
- 影响声音定位的几个因素
- 华为数据通信部门怎么样_华为最高级别认证适合小白吗
- Jsoup抓取网页数据完成一个简易的Android新闻APP
- 理解node.js中的 Event Loop
- SpringIOC的创建对象的单例多例模式和自动注入
- 软件工程师你应该知道的100个原则
- AKKA 集群中的发布与订阅Distributed Publish Subscribe in Cluster
- 代码安全招聘岗位火热来袭(职位更新)
- php删除数组中相同的元素,只保留一个相同元素
- zend studio php插件,Zend Studio使用技巧两则 zend studio安装 zend studio 插件 zend studio 中文...
- qq游戏坦大战服务器维护中,高手教你如何解决QQ游戏问题
- android隐藏顶部导航栏,Android去除顶部导航条
- 组合测试法是什么 软件测试,组合测试模型方法
- OpenGL编程(四)改变窗口大小时保持图形的原形
- 木叶村第一次全村人民代表大会
- 微信小程序---下载、打开及预览PDF文件的方法
- 安卓4.4和6.0系统wifi开关设置
- jQuery即点即改
- 各大公司数据结构与算法面试题解答(一)