MyException - 我的异常网
当前位置:我的异常网» 设计模式 » 再起航,小弟我的学习笔记之JavaScript设计模式05(

再起航,小弟我的学习笔记之JavaScript设计模式05(简单工厂模式)

www.MyException.Cn  网友分享于:2013-08-22  浏览:0次
再起航,我的学习笔记之JavaScript设计模式05(简单工厂模式)

我的学习笔记是根据我的学习情况来定期更新的,预计2-3天更新一章,主要是给大家分享一下,我所学到的知识,如果有什么错误请在评论中指点出来,我一定虚心接受,那么废话不多说开始我们今天的学习分享吧!

前几次已经和大家分享过了,如何实现javascript的封装继承和多态,这次我们开始正式介绍javascript设计模式。

这次我们要介绍的是创建型设计模式,创建型设计模式是一类处理对象创建的设计模式,通过某种方式控制对象的创建来避免基本对象创建时可能导致设计上的问题或增加设计上的复杂度。

在创建型设计模式中,主要为大家分享的有简单工厂模式,工厂方法模式,抽象工厂模式,建造者模式,原型模式,单例模式。本次主要和大家分享,简单工厂模式。

简单工厂模式

简单工厂模式(Simple Factory): 又叫静态工厂方法,由一个工厂对象决定创建某一种产品对象的实例。主要用来创建同一类对象。

这样说有可能概念很模糊,下面我用示例给大家演示

如果我们要写一组js方法分别要根据不同情况弹出alert(提示框),Confirm(确认框),Prompt(可输入提示框),我们会怎么做?

就谈谈我吧,要换做以前我会直接调用这3个方法,哪里使用哪里直接调用

function TestAlert(){
     alert("这是一个提示框!");
 }
 function TestConfirm(){
     confirm("这是一个确认框!")
 }
 function TestPrompt(){
     prompt("今天天气怎么样!","");
 }

但是,如果需求更改,我要弹出别的提示,我有可能会再写3个方法

function TestAgainAlert(){
     alert("这又是一个提示框!");
 }
 function TestAgainConfirm(){
     confirm("这又是一个确认框!")
 }
 function TestAgainPrompt(){
     prompt("明天天气怎么样!","");
 }

以前或许觉得没什么就复制粘贴改改就行,但是如果写的多了,有可能方法在哪自己都忘了还要一个个去找,但是有了封装的概念之后,我可能会这么改,我可以把这三个提示框看成3个类,分别是提示类,确认类,可输入提示类

var AlertClass=function(text){
    this.content=text;
 }
AlertClass.prototype.show=function(){
    alert(this.content);
};

我们来看看调用

var TestAlert=new AlertClass("这是一个提示框!");
TestAlert.show();

其他的类同理

//确认类
 var ConfirmClass=function(text){
    this.content=text;
 }
ConfirmClass.prototype.show=function(){
    confirm(this.content);
};
var TestConfirm=new ConfirmClass("这是一个确认框!");
TestConfirm.show();
//可输入提示类
 var PromptClass=function(text){
    this.content=text;
 }
PromptClass.prototype.show=function(){
    prompt(this.content);
};
var TestPrompt=new PromptClass("今天天气怎么样!");
TestPrompt.show();

这样,我们封装成类了之后可以便于管理,但是还是很麻烦因为不同的情况我们需要,实例化不同的对象,这个时候我们可以通过简单工厂模式,去解决这个问题。

我们先定义一个工厂

var EjectFactory=function(name,text){
    switch(name){
        case 'alert':
        return new AlertClass(text);
        case 'confirm':
        return new confirm(text);
        case 'prompt':
        return new PromptClass(text);
    }
}

这样我们就创建了一个工厂,我们试着调用一下。

var TestAgainAlert=EjectFactory('alert','这是一个简单工厂模式创建的提示框!');
TestAgainAlert.show();

是不是看上去很简单,这样我们就可以通过一个工厂去决定我们要去实例化哪个类的实例,简单工厂模式的理念就是创建对象,像我刚才演示就是对不同的类实例化,当然除此之外简单工厂模式还可以用来创建相似的对象。

我们同样用上面的例子,我们可以看到上面的例子同样的都有content属性和show方法,那么我们可以把他们提出来。

var CreateEjectFactory=function(type,text){
    //我们先创建一个对象,并对对象拓展属性和方法
    var o=new Object();
    o.content=text;
    o.show=function(){
        if(type=="alert") alert(text);
        if(type=="confirm") confirm(text);
        if(type=="prompt") prompt(text);
    }
    return o;
}

我们来调用一下

var TestAgainAlert=CreateEjectFactory('alert','这还是一个简单工厂模式创建的提示框!');
TestAgainAlert.show();

我们上述两种简单工厂模式的创建方法,第一种是通过实例化对象创建的,第二种是通过创建一个新对象然后包装其属性和功能来实现的,我们具体的选择还是要根据我们的实际需求来决定。

也谢谢大家看到这里:)如果你觉得我的分享还可以请点击推荐,分享给你的朋友让我们一起进步~

好了以上就是本次分享的全部内容,本次示例参考自JavaScript设计模式一书,让我们一点点积累一点点成长,希望对大家有所帮助。

文章评论

程序员周末都喜欢做什么?
程序员周末都喜欢做什么?
“懒”出效率是程序员的美德
“懒”出效率是程序员的美德
Java程序员必看电影
Java程序员必看电影
做程序猿的老婆应该注意的一些事情
做程序猿的老婆应该注意的一些事情
2013年中国软件开发者薪资调查报告
2013年中国软件开发者薪资调查报告
程序员必看的十大电影
程序员必看的十大电影
漫画:程序员的工作
漫画:程序员的工作
总结2014中国互联网十大段子
总结2014中国互联网十大段子
旅行,写作,编程
旅行,写作,编程
亲爱的项目经理,我恨你
亲爱的项目经理,我恨你
一个程序员的时间管理
一个程序员的时间管理
为啥Android手机总会越用越慢?
为啥Android手机总会越用越慢?
初级 vs 高级开发者 哪个性价比更高?
初级 vs 高级开发者 哪个性价比更高?
程序员的鄙视链
程序员的鄙视链
聊聊HTTPS和SSL/TLS协议
聊聊HTTPS和SSL/TLS协议
科技史上最臭名昭著的13大罪犯
科技史上最臭名昭著的13大罪犯
60个开发者不容错过的免费资源库
60个开发者不容错过的免费资源库
什么才是优秀的用户界面设计
什么才是优秀的用户界面设计
代码女神横空出世
代码女神横空出世
每天工作4小时的程序员
每天工作4小时的程序员
程序员都该阅读的书
程序员都该阅读的书
“肮脏的”IT工作排行榜
“肮脏的”IT工作排行榜
程序猿的崛起——Growth Hacker
程序猿的崛起——Growth Hacker
Web开发人员为什么越来越懒了?
Web开发人员为什么越来越懒了?
2013年美国开发者薪资调查报告
2013年美国开发者薪资调查报告
我跳槽是因为他们的显示器更大
我跳槽是因为他们的显示器更大
 程序员的样子
程序员的样子
5款最佳正则表达式编辑调试器
5款最佳正则表达式编辑调试器
看13位CEO、创始人和高管如何提高工作效率
看13位CEO、创始人和高管如何提高工作效率
那些争议最大的编程观点
那些争议最大的编程观点
团队中“技术大拿”并非越多越好
团队中“技术大拿”并非越多越好
Web开发者需具备的8个好习惯
Web开发者需具备的8个好习惯
老程序员的下场
老程序员的下场
Google伦敦新总部 犹如星级庄园
Google伦敦新总部 犹如星级庄园
当下全球最炙手可热的八位少年创业者
当下全球最炙手可热的八位少年创业者
老美怎么看待阿里赴美上市
老美怎么看待阿里赴美上市
程序员最害怕的5件事 你中招了吗?
程序员最害怕的5件事 你中招了吗?
中美印日四国程序员比较
中美印日四国程序员比较
程序员眼里IE浏览器是什么样的
程序员眼里IE浏览器是什么样的
编程语言是女人
编程语言是女人
程序员应该关注的一些事儿
程序员应该关注的一些事儿
写给自己也写给你 自己到底该何去何从
写给自己也写给你 自己到底该何去何从
10个帮程序员减压放松的网站
10个帮程序员减压放松的网站
程序员和编码员之间的区别
程序员和编码员之间的区别
Java 与 .NET 的平台发展之争
Java 与 .NET 的平台发展之争
我是如何打败拖延症的
我是如何打败拖延症的
鲜为人知的编程真相
鲜为人知的编程真相
那些性感的让人尖叫的程序员
那些性感的让人尖叫的程序员
我的丈夫是个程序员
我的丈夫是个程序员
软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有