博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JavaScript 设计模式之工厂模式
阅读量:7040 次
发布时间:2019-06-28

本文共 2129 字,大约阅读时间需要 7 分钟。

hot3.png

 上一篇<<>>谈到单例模式.这节我们谈谈工厂模式

我理解的设计模式是为了提高代码复用,增强扩展性的代码编写理念,所以无关乎编程语言。

一.简单工厂(Sample Factory)

function createPop(type,text){     var o = new object();     o.content = text;     o.show = function(){            //todo     };     if(type == 'alert'){            //todo     } else if(type == 'conform'){            //todo     } else if(type == 'prompt'){            //todo     }}

创建一个Alert:var nameAlert = new createPop('alert','请输入姓名!');

二.工厂方法(Factory Method)

工厂方法是将创建对象的方法推迟到子类中。如一个工厂方法可以生产几种食品类。

var FoodFactory = function(type,count){     if(this instanceof FoodFactory){           return new this[type](count);     }}FoodFactory.prototype = {     Pie: function(count){            //todo     },     Pizza: function(count){            //todo     },     Cake: function(count){            //todo     }}

三.抽象工厂(Abstract Factory)

抽象类显示定义一些功能,但没有具体实现。子类继承了抽象类还需要实现各个虚方法。就是在其他面向对象语言里的多态,创建子类赋值给父类,好处是调用方式都是一样的,运行时会自动选择子类对应的方法。

如一个汽车的公司有多个品牌,它只负责设计汽车有什么功能,但真正的生产给子公司实现。

var VehicleFactory = function(subType,superType){       if(typeof VehicleFactory[superType] === 'function'){           fucntion F(){};  //缓存类           F.prototype = new VehicleFactory[super]();           subType.constructor = subType;           subType.prototype = new F();      } else {           throw new Error('未创建该抽象类');     }}//抽象类VehicleFactory.Car = function(){     this.type = 'Car';};VehicleFactory.Car.prototype = {     getPrice:function(){           return new Error('抽象方法不能调用');     },     // ...}//抽象类VehicleFactory.Truck= function(){     this.type = 'Truck';};VehicleFactory.Truck.prototype = {     getPrice:function(){           return new Error('抽象方法不能调用');     },     // ...}//宝马子类var BMW = function(price,speed){    this.price = price;    this.speed = speed;};VehicleFactory(BMW,'Car'); //宝马继承了抽象父类Car,有了一些抽象方法,但是不能使用BMW.prototype.getPrice = function(){    return this.price;}//使用var z4 = new BMW(50000);console.log(z4.type);        //Car      继承父类Car的属性console.log(z4.getPrice());  //50000 继承父类Car的抽象方法,自己重新实现

抽象工厂做了什么?我们需要一个新的子类时,使用抽象工厂让子类继承对应的一个抽象类,得到一些属性和虚方法,子类再实现这些虚方法,就可以使用了。

感兴趣可以加我微信,里面很多学习质料

102008_9vEh_3703858.jpg

 

 

 

转载于:https://my.oschina.net/u/3703858/blog/1629271

你可能感兴趣的文章
SQL应用与开发:(一)导论和环境
查看>>
简单封装quartz实现任务调度的配置和管理
查看>>
Android Matrix详解
查看>>
JVM 堆栈区域数据存放流程
查看>>
【MyBatis框架】配置文件-resultMap总结
查看>>
JSP生成验证码
查看>>
浏览器的窗口位置和大小
查看>>
Path实现常见toolbar点击弹出菜单效果
查看>>
介绍Spring Cloud微服务架构的核心特性
查看>>
剥开比原看代码(六):比原是如何把请求区块数据的信息发出去的
查看>>
小猿圈linux之linux基础命令大全(一)
查看>>
当经历所有大厂的实习面试过后
查看>>
从BEC“代币蒸发”事件看智能合约编写注意事项
查看>>
CentOS 7 Minimal 安装 LXQT
查看>>
机器码 指令 汇编语言 的关系
查看>>
摸索 JS 内深拷贝的最佳实践
查看>>
设计师面试会遇到的问题(part1:HR篇)
查看>>
周记_
查看>>
去掉UIPickerView的弯曲弧度
查看>>
使阿里oss实现前端代码自动上传
查看>>