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

第一次需求

开发一个登录模块的需求,用户名输入框如果输入的内容不符合规范就自定义一个警告框警示一句:‘用户名不能多于16个字母或数字’

var LoginAlert = function(text) {
this.content = text;
}
LoginAlert.prototype.show = function() {
// 显示警告框
} var useNameAlert = new LoginAlert('用户名不能多于16个字母或数字');
useNameAlert.show();

关于用户密码输入错误也有一句提示:‘输入的密码不正确’。

var passwordAlert = new LoginAlert('输入的密码不正确');
passwordAlert.show();

又有一个需求,当用户登录时,如果出现用户名不存在,也提示一句:‘您的用户名不存在,请重新输入’。

这个时候又得重新创建一个类。

var LoginConfirm = function(text) {
this.content = text;
}
LoginConfirm.prototype.show = function() {
// 显示确认框
} var loginFailConfirm = new LoginConfirm('您的用户名不存在,请重新输入');
loginFailConfirm.show();

现在登录成功后,又得需要一个自定义提示框,除了有确定取消按钮,也提示一句话:’欢迎回来‘。

这又是一个新的类:

var LoginPrompt = function(text) {
this.content = text;
}
LoginPrompt.prototype.show = function() {
// 显示提示框
}

现在需要开发一个注册模块,用需要用到提示框相关的功能。’

如果类太多,提供一个

以前的登录模块有三个类,分别为LoginAlert、LoginConfirm、LoginPrompt,还是以Login为前缀,现在来写个简单工厂,也即是封装一个函数,我们用这个函数创建我们需要的对象为我所用即可。这样其他人不用关心创建这个对象用到哪些基类,这样其他人只需要记住这个函数就可以了。这个函数通常也被称为工厂函数。

举个例子,比如一个会变魔术的魔法师,你想要魔法师给你变礼物,但是你不关心魔法师用什么来变的,你只需要这位魔法师就可以了。

例如体育商点售卖体育器材,里面有很多体育用品,及相关介绍等,当你需要买篮球的时候,只需要告诉售货员就可以,他会帮你找找到你想要的东西。

// 篮球基类
var Basketball = function() {
this.intro = '篮球盛行于美国';
}
Basketball.prototype = {
getMember: function() {
console.log('每个队伍需要5名队员');
},
getBallSize: function() {
console.log('篮球很大');
}
} // 足球基类
var Football = function() {
this.intro = '足球很流行';
}
Football.prototype = {
getMember: function() {
console.log('每个队伍需要11名队员');
},
getBallSize: function() {
console.log('足球很大')
}
} // 网球基类
var Tennis = function() {
this.intro = '网球介绍';
}
Tennis.prototype = {
getMember: function() {
console.log('每个队伍需要1名队员')
},
getBallSize: function() {
console.log('网球很少');
}
} // 运动工厂
var sportsFactory = function(name) {
switch(name) {
case 'NBA':
return new Basketball();
case 'worldcup':
return new Football();
case 'frenchopen':
return new Tennis();
}
} // 示例
var footBall = sportsFactory('worldcup');
console.log(footBall);
console.log(footBall.intro);
footBall.getMember();

那么自定义弹框可以这样实现:

var popFactory = function(name,text) {
switch(name) {
case 'alert':
return new LoginAlert(text);
case 'confirm':
return new LoginConfirm(text);
case 'prompt':
return new LoginConfirm(text);
}
}
var useNameAlert = popFactory('alert','用户名不能多于16个字母或数字');
useNameAlert.show()

一个对象有时也可代替许多类

从上面LoginAlert、LoginConfirm、LoginConfirm三个类,有很多地方是相同,比如都有关闭按钮,都有提示文案等,我们也可以抽象提取出来公用的,也可以用简单工厂的方式来实现它们。

举个例子,比如我想创建一些书,那些书都有一些相似的地方,比如目录、页码等。也有一些不相似的地方,比如书名、出版时间、书的类型等,对于创建的对象相似的属性好处理,对于不同的属性就要有针对性的进行处理了,比如我们将不同的属性作为参数传递进来处理。

// 工厂模式
function createBook(name,time,type) {
// 创建一个对象,并对对象扩展属性和方法
var o = new Object();
o.name = name;
o.time = time;
o.type = type;
o.getName = function() {
console.log(this.name)
} // 将对象返回
return o;
} var book1 = createBook('js book','2004','js');
var book2 = createBook('java book','2005','java'); book1.getName(); // js book
book2.getName(); // java book

我们对上面三个弹框类进行优化:

function createPop(type,text) {
// 创建一个对象,并对对象扩展属性和方法
var o = new Object();
o.content = text;
o.show = function() {
// 显示方法
}
if(type == 'alert') {
// 警示框差异部分
}
if(type == 'prompt') {
// 提示框差异部分
}
if(type == 'confirm') {
// 确认框差异部分
} // 将对象返回
return o;
} // 创建警示框
var userNameAlert = createPop('alert','用户名只能是26个字母或数字');

你的理解决定你的选择方式

第一种是通过类实例化对象创建的,第二种是通过创建新的对象然后包装增强其属性和功能来实现的。

【JS设计模式笔记】神奇的魔术师-简单工厂模式(创建型)的更多相关文章

  1. 设计模式(四):SIMPLE FACTORY简单工厂模式 -- 创建型模式

    1.定义 简单工厂模式又称静态工厂方法模式.重命名上就可以看出这个模式一定很简单.它存在的目的很简单:定义一个用于创建对象的接口. 2.适用场景 如果一个客户要一款宝马车,一般的做法是客户去创建一款宝 ...

  2. 设计模式(3)--SimpleFactory( [1] 简单工厂模式)--创建型

    1.模式定义: 简单工厂模式是类的创建模式,又叫做静态工厂方法(Static Factory Method)模式.简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例. 2.模式特点: 实现方式的 ...

  3. 设计模式(三): FACTORY工厂模式 -- 创建型模式

    1.定义 定义一个用于创建对象的接口,让子类决定实例化哪一个类,Factory Method使一个类的实例化延迟到了子类. 2.适用场景 1.第一种情况是对于某个产品,调用者清楚地知道应该使用哪个具体 ...

  4. 学习设计模式第二十七 - GoF之外简单工厂模式

    示例代码来自<深入浅出设计模式>和<大话设计模式> 概述 简单工厂模式又被称为静态工厂模式,属于类的创建型模式.其实质是由一个工厂类根据传入的参量,动态决定应该创建出哪一个产品 ...

  5. [Python设计模式] 第1章 计算器——简单工厂模式

    github地址:https://github.com/cheesezh/python_design_patterns 写在前面的话 """ 读书的时候上过<设计模 ...

  6. Java 设计模式系列(二)简单工厂模式和工厂方法模式

    Java 设计模式系列(二)简单工厂模式和工厂方法模式 实现了创建者和调用者的分离.分为:简单工厂模式.工厂方法模式.抽象工厂模式 简单工厂模式.工厂方法模式都很简单,就不详细介绍了. 一.简单工厂 ...

  7. Javascript设计模式理论与实战:简单工厂模式

    通常我们创建对象最常规的方法就是使用new关键字调用构造函数,这会导致对象之间的依赖性.工厂模式是一种有助于消除类之间依赖性的设计模式,它使用一个方法来决定要实例化哪一个类.本文详细介绍了简单工厂模式 ...

  8. 设计模式(C#)——02简单工厂模式

    推荐阅读:  我的CSDN  我的博客园  QQ群:704621321       工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来.通俗来说,你只关心怎么用,不用关心怎么做 ...

  9. 设计模式(Java语言)- 简单工厂模式

    简单工厂模式有称为静态工厂模式,属于设计模式中的创建型模式.简单工厂模式通过对外提供一个静态方法来统一为类创建实例.简单工厂模式的目的是实现类与类之间解耦,其次是客户端不需要知道这个对象是如何被穿创建 ...

  10. 设计模式(二)——Java简单工厂模式

    简单工厂模式 案例: 披萨的项目(要便于披萨种类的扩展,要便于维护) 1)披萨的种类很多(比如 GreekPizz.CheesePizz 等) 2)披萨的制作有 prepare,bake, cut, ...

随机推荐

  1. 详解Web应用安全系列(10)文件上传漏洞

    文件上传漏洞(File Upload Vulnerabilities)是Web攻击中常见的一种安全漏洞,它允许攻击者上传并执行恶意文件,从而可能对Web服务器造成严重的安全威胁. 一.定义与原理 文件 ...

  2. JavaWeb编写登录注册案例并把数据插入MySQL数据库中

    小白学习了这么久的java,第一次上手编写一个完整的登录以及注册案例,麻雀虽小五脏俱全!!!! 案例: 登录和注册 第一:所需创建的包以及相关类 1,domain包(也就是平时所说的Javabean) ...

  3. 测试思想-流程规范 用例优先级定义与使用规范 V1.0

    用例优先级定义与使用规范 V1.0 By:授客   1.      规范说明 目的 对软件测试过程中的用例级别进行详细描述及标准化定义,明确不同测试阶段的测试范围,减少测试冗余投入,提高测试效率,建立 ...

  4. P6680 [CCO2019] Marshmallow Molecules 题解

    P6680 题意 一个 \(n\) 点 \(m\) 边的图,图无重边,无自环. 满足这样一条性质:如果三边互不相等,则三边可以构成三角形. 思路 思路简单,用集合的思想来做. 引用一下 K0stlin ...

  5. 单细胞测序最好的教程(十六):关于RNA速率你想知道的都在这

    作者按 本章节详细讲解了基于RNA速率的三种拟时序模型,包括稳态模型,EM模型和深度学习模型,并对比了不同模型的适用场景与计算特点.本教程首发于单细胞最好的中文教程,未经授权许可,禁止转载. 全文字数 ...

  6. Linux 破解mysql密码

    mysql忘记密码怎么办 [root@master ~]# mysql -uroot -pHuawei123123$ mysql: [Warning] Using a password on the ...

  7. 什么是3D扫描技术?

    相关: https://www.bilibili.com/video/BV1fN4y1z7uD/?vd_source=f1d0f27367a99104c397918f0cf362b7 接触式:就是使用 ...

  8. CCF A类会议 —— AAAI2022 论文审稿模板

    ======================================================= 前段时间为实验室负责审理AAAI 2022的会议稿件,感觉这个审稿模板还是不错的,这里保 ...

  9. vue之循环遍历v-for

    1.背景 2.遍历数组 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&qu ...

  10. maven配置阿里云镜像与修改默认仓库地址

    1.背景 通常来说maven的默认镜像很慢,我们需要一个国内镜像,拉取jar包的时候从国内下载, 当然阿里云镜像是很好的一个候选 2.安装 官网下载一个maven解压即可使用 3.修改配置 第一步,找 ...