我的学习笔记是根据我的学习情况来定期更新的,预计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设计模式一书,让我们一点点积累一点点成长,希望对大家有所帮助。

再起航,我的学习笔记之JavaScript设计模式05(简单工程模式)的更多相关文章

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

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

  2. 再起航,我的学习笔记之JavaScript设计模式30(简单模板模式)

    简单模板模式 概念介绍 简单模板模式(Simple template): 通过格式化字符串拼凑出视图避免创建视图时大量节点操作,优化内存开销. 创建模板 在实际的业务中如果我们需要进行前后台交互,或多 ...

  3. 再起航,我的学习笔记之JavaScript设计模式06(工厂方法模式)

    上一次已经给大家介绍了简单工厂模式,相信大家对创建型设计模式有了初步的了解,本次我将给大家介绍的是工厂方法模式. 工厂方法模式 工厂方法模式(Factory Method):通过对产品类的抽象使其创建 ...

  4. 再起航,我的学习笔记之JavaScript设计模式06(抽象工厂模式)

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

  5. 再起航,我的学习笔记之JavaScript设计模式07(抽象工厂模式)

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

  6. 再起航,我的学习笔记之JavaScript设计模式13(装饰者模式)

    装饰者模式 装饰者模式(Decorator): 在不改变原对象的基础上,通过对其进行过包装拓展(添加属性高或者方法)使原有对象可以满足用户的更复杂需求. 如果现在我们有个需求,需要做一个提交表单,当我 ...

  7. 再起航,我的学习笔记之JavaScript设计模式23(中介者模式)

    中介者模式 概念介绍 中介者模式(Mediator):通过中介者对象封装一系列对象之间的交互,使对象之间不再相互引用降低他们之间的耦合,有时中介者对象也可以改变对象之间的交互. 创建一个中介 中介者模 ...

  8. 再起航,我的学习笔记之JavaScript设计模式16(享元模式)

    ### 享元模式 **享元模式(Flyweight):** 运用共享技术有效地支持大量的细粒度的对象,避免对象间拥有相同内容造成多余的开销. 上回我们在组合模式中创建了文章列表类,这次我们要向不同的文 ...

  9. 再起航,我的学习笔记之JavaScript设计模式02

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

随机推荐

  1. 在Linux与Windows上获取当前堆栈信息

    在编写稳定可靠的软件服务时经常用到输出堆栈信息,以便用户/开发者获取准确的运行信息.常用在日志输出,错误报告,异常检测. 在Linux有比较简便的函数获取堆栈信息: #include <stdi ...

  2. Windows 10环境安装VIM代码补全插件YouCompleteMe

    Windows 10环境安装VIM代码补全插件YouCompleteMe 折腾一周也没搞定Windows下安装VIM代码补全插件YouCompleteMe,今天在家折腾一天总算搞定了.关键问题是在于P ...

  3. 类型转换之 PropertyEditorSupport类

    这个类可以用于自定义的类型转换, 子类继承这个类之后可以重写子类的方法 ,其中比较重要的是setAsText和setValue方法,setAsText 子自己的方式处理转换,setValue将转换的结 ...

  4. 使用File、Path和Directory进行常见的操作

    我们偶尔会用到文件操作,其中File.Path和Directory这三个类是比较常见的,今天写了一个测试demo,也是顺便学习一下,记录一二. BTW,使用这几个类的时候需要引用using Syste ...

  5. Java 基础 break和continue关键字的使用

    break&continue关键字的使用 break:使用在switch...case语句或者循环结构语句中,表示结束当前循环. 示例代码: public class TestBreak { ...

  6. 利用wamp配置虚拟主机

    第一步:打开wamp--Apache--httpd.conf找到# Virtual hosts 一行,把其下面的一行中的#去掉.

  7. 百度统计API的使用

    百度统计API的使用 在搭建自己博客的时候,希望自己能有个日志系统,能够看到PV.UV等信息,同时自己也搭建了个ELK系统,可惜服务器配置太低(1GHZ+1G内存),根本运行不起来.只能使用第三方的日 ...

  8. 拥抱.NET Core系列:依赖注入(2)

    上一篇"拥抱.NET Core系列:依赖注入(1)"大体介绍了服务注册.获取和生命周期,这一篇来做一些补充. 由于内容跨度大(.NET Core.ASP.NET Core),所以文 ...

  9. Java自学手记——Java中的关键字

    Java中的一些关键字对于初学者来说有时候会比较混乱,在这里整理一下,顺便梳理一下目前掌握的关键字. 权限修饰符 有四个,权限从大到小是public>protected>defaul(无修 ...

  10. Java语言的9个主要特性

    Java作为时下很流行的一门编程语言,受到很多人的热爱,那么它有哪些特性呢?一起来看看吧. 1.Java语言是简单的 Java语言的语法与C语言和C++语言很接近,使得大多数程序员很容易学习和使用.另 ...