我理解的设计模式是为了提高代码复用,增强扩展性的代码编写理念,所以无关乎编程语言。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相关推荐

  1. JavaScript设计模式--简单工厂模式例子---XHR工厂

    JavaScript设计模式--简单工厂模式例子---XHR工厂 第一步,Ajax操作接口(目的是起一个接口检测作用) (1)引入接口文件 //定义一个静态方法来实现接口与实现类的直接检验 //静态方 ...

  2. javascript 面向对象编程(工厂模式、构造函数模式、原型模式)

    javascript 面向对象编程(工厂模式.构造函数模式.原型模式) CreateTime--2018年3月29日17:09:38 Author:Marydon 一.工厂模式 /*** 工厂模式*/ ...

  3. JavaScript --- [学习笔记]观察者模式 理解对象 工厂模式 构造函数模式

    说明 本系列(JS基础梳理)为后面TCP的模拟实现做准备 本篇的主要内容: 观察者模式.工厂模式.构造函数模式 和 对对象的理解 1. 观察者模式 参考JavaScript设计模式 1.1 消息注册方 ...

  4. JavaScript设计模式-10.工厂模式实例xhr

    1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="UTF-8"> 5 < ...

  5. JavaScript 设计模式核⼼原理与应⽤实践 之 创建型:工厂模式·简单工厂——区分“变与不变”

    JavaScript 设计模式核⼼原理与应⽤实践 之 创建型:工厂模式·简单工厂--区分"变与不变" 先来说说构造器 在介绍工厂模式之前,为了辅助大家的理解,我想先在这儿给大家介绍 ...

  6. JavaScript 设计模式核⼼原理与应⽤实践 之 创建型:工厂模式·抽象工厂——理解“开放封闭”

    JavaScript 设计模式核⼼原理与应⽤实践 之 创建型:工厂模式·抽象工厂--理解"开放封闭" 一个不简单的简单工厂引发的命案 在实际的业务中,我们往往面对的复杂度并非数个类 ...

  7. Javascript设计模式(三)-- 抽象工厂模式

    抽象工厂模式:通过对类的工厂抽象使其业务用于对产品类簇的创建,而不负责创建某一类产品的实例. 抽象类 //测试抽象类,使用其实例方法时会抛出错误 var test = function(){}; te ...

  8. JavaScript设计模式(一)-- 简单工厂模式

    定义 简单工厂模式:又叫静态工厂方法,由一个工厂对象决定创建某一种产品对象类的实例.主要用来创建同一类对象. 如果类太多,就提供一个 对于多个类,在每次创建时还要找相对应的类.为此,直接封装在一个函数 ...

  9. JavaScript学习(四十二)—利用工厂模式创建对象以及工厂模式创建对象的不足

    JavaScript学习(四十二)-利用工厂模式创建对象以及工厂模式创建对象的不足 一.利用工厂模式创建对象 工厂模式是JavaScript中的一种设计模式,它的作用是批量创建具有同种属性的对象. 格 ...

最新文章

  1. 初步了解React Native的新组件库firstBorn
  2. 影响声音定位的几个因素
  3. 华为数据通信部门怎么样_华为最高级别认证适合小白吗
  4. Jsoup抓取网页数据完成一个简易的Android新闻APP
  5. 理解node.js中的 Event Loop
  6. SpringIOC的创建对象的单例多例模式和自动注入
  7. 软件工程师你应该知道的100个原则
  8. AKKA 集群中的发布与订阅Distributed Publish Subscribe in Cluster
  9. 代码安全招聘岗位火热来袭(职位更新)
  10. php删除数组中相同的元素,只保留一个相同元素
  11. zend studio php插件,Zend Studio使用技巧两则 zend studio安装 zend studio 插件 zend studio 中文...
  12. qq游戏坦大战服务器维护中,高手教你如何解决QQ游戏问题
  13. android隐藏顶部导航栏,Android去除顶部导航条
  14. 组合测试法是什么 软件测试,组合测试模型方法
  15. OpenGL编程(四)改变窗口大小时保持图形的原形
  16. 木叶村第一次全村人民代表大会
  17. 微信小程序---下载、打开及预览PDF文件的方法
  18. 安卓4.4和6.0系统wifi开关设置
  19. jQuery即点即改
  20. 各大公司数据结构与算法面试题解答(一)

热门文章

  1. 华为鸿蒙编程:如何显示网络图片
  2. 贫穷中透着零基础的单人制作游戏手册之二:做游戏不光靠创意
  3. 朱峰谈概念设计(六):美术部门
  4. 再观手游市场新风口-二次元游戏
  5. Linux Shell变量类型
  6. 概率dp——处理分母为0的情况hdu3853
  7. BZOJ 4710: [Jsoi2011]分特产
  8. c++入门之——const在函数名前面和函数后面的区别
  9. mysql 用户管理和权限设置
  10. EasyUI datagrid : 启用行号、固定列及多级表头后,头部行号位置单元格错位的问题...