JavaScript也有设计模式(一)——简单工厂模式
来源:互联网 发布:箱体捉妖指标公式源码 编辑:程序博客网 时间:2024/06/17 20:38
如果希望代码向人一样,能够成长,那么设计模式是必不可少的。今天接触第一个设计模式,属于创建型设计模式——简单工厂设计模式
需求:如果我希望要一个弹框,我的js应该怎么写?
// 如果我需要一个弹框 function Pop(text){ this.content = text; } Pop.prototype.show = function(){ //显示弹框 }; // 测试 var pop = new Pop("请输入内容"); pop.show();
上例用对象的方式,创建了一个弹框的对象。那么,如果我需要不通类型的弹框呢,比如:提示框,警告框,确认框。。。该怎么做?
可以创建三个对象,然后用哪个就创建哪个。
// 提示框对象 function AlertPop(text){ this.content = text; } AlertPop.prototype.show = function(){ //显示弹框 }; // 警告框 function WarnPop(text){ this.content = text; } WarnPop.prototype.show = function(){ //显示弹框 }; // 确认框 function ConfirmPop(text){ this.content = text; } ConfirmPop.prototype.show = function(){ //显示弹框 }; // 测试 var ap = new AlertPop("您的内容有误"); var wp = new WarnPop("可能有问题哦"); var cp = new ConfirmPop("您确定吗"); ap.show(); wp.show(); cp.show();
但是如果这样,我们每次使用都要找对应的类,太麻烦了,可不可以统一管理呢?
第一种方式 用工厂管理创建对象
用一个工厂对象将创建实例的动作封装起来,对外只暴露工厂对象
var PopFactory = function(name){ switch (name){ case 'alert': return new AlertPop("您的内容有误"); case 'warn': return new WarnPop("可能有问题哦"); case 'confirm': return new ConfirmPop("您确定吗"); } }
第二种方式 用工厂管理差异部分
在创建弹框的时候,公共的部分抽取出来,判断管理各自的私有部分
function createPop(type,text){ var o = new Object(); o.content = text; o.show = function(){ // 显示方法 }; if(type == 'alert'){ // 提示弹框差异部分 } if(type == 'warn'){ // 警告弹框差异部分 } if(type == 'confirm'){ // 确认框差异部分 } return o; } var a = createPop('alert','内容有误')
两种方式有一定区别:
1 第一种方式,弹框是实例化对象创建的;第二种 则是 创建一个新对象,然后不断增强属性和方法。
2 第一种方式,如果三个类继承同一个父,那么父的原型方法可以复用;而第二种 就是单独的一个对象
3 第一种方式,扩展更灵活;第二种,如果弹框变化很大,很可能要拆解代码
4 第一种方式实现起来更复杂;第二种相对简单
使用时,根据需求而定。
1 0
- JavaScript也有设计模式(一)——简单工厂模式
- 设计模式—简单工厂(一)
- 设计模式学习003——工厂模式(工厂方法、抽象工厂),简单工厂【也叫静态工厂】
- 简单工厂模式——设计模式(一)
- 设计模式(一)——简单工厂模式
- 设计模式(一)——简单工厂模式
- Java设计模式(一) 设计模式初探——简单工厂和工厂方法模式
- 设计模式(一):简单工厂模式
- 设计模式(一)简单工厂模式
- 设计模式(一)简单工厂模式
- 设计模式(一)简单工厂模式
- 设计模式(一)简单工厂模式
- 设计模式(一):简单工厂模式
- Java设计模式:工厂模式(一)简单工厂模式
- 设计模式(一)——简单工厂
- javascript设计模式(一)-简单的工厂模式
- 大话设计模式一——简单工厂模式
- 一、设计模式——简单工厂模式
- "Failed to create JVM" Android studio不能启动问题解决
- 数据结构课程设计——考试报名管理系统
- To Me
- Semi-direct Visual Odometry(SVO)安装配置
- 走进AngularJs(七) 过滤器(filter) - 吕大豹
- JavaScript也有设计模式(一)——简单工厂模式
- Why Private Property Rather Than Public Property In Java?
- 设置a的bit 3
- PHP中$GLOBALS与global的区别
- 学习、工作心得分享
- 39,40,216 Combination Sum I II III
- ServletContext详解
- MYSQL经典SQL之生日问题
- 开源框架01(ion,Volley,retrofit;Glide,picasso,fresco)