JS 简单工厂模式,工厂模式(二)
一.什么是工厂模式:
工厂模式就是用来创建对象的一种最常用的设计模式,我们不暴露创建对象的具体逻辑,而是将逻辑封装到一个函数中,那么,这个函数 就可以被视为一个工厂。那么,在实际项目中,我们是不是可以这样子理解呢?
比如我之前做的记事本的项目中,有多个页面有播放录音的功能,为了将该功能的代码实现复用,我对该方法进行了封装,然后页面中,在使用的时候,我点击播放的时候,只是去调用我封装的方法,但是我不需要去考虑 播放的方法里面都有什么。没有暴露函数里面的具体逻辑。其实,工厂模式的根本就是面向对象的三大特性中的封装。
工厂模式根据抽象程度的不同分为简单工厂模式,工厂模式和抽象工厂模式。今天呢,主要和大家分享一下简单工厂和工厂模式这两种。
二.什么是简单工厂模式:
简单工厂模式又叫静态工厂模式,由一个工厂对象决定创建某一种产品对象类的实例,主要用来创建同一类对象。在简单工厂模式中,可以根据参数的不同返回不同类的实例。简单工厂模式可以理解成,一个工厂只生产各种球的工厂,比如篮球,足球这些,客户购买的时候,只表明自己想要类型的球就可以,不必考虑球是怎么生产的。
下面的例子是封装了一个绘制的方法,该方法就相当于是draw的工厂,里面有画线,画矩形的方法,通过传不同的参数控制是选择 画线,还是画矩形的方法。
class TEXT {
// 画形状
Draw(val) {
var draw;
switch(val) {
case 'line':
draw =new drawLine();
break;
case 'rectangle':
draw = new drawRect();
break;
}
return draw;
}
}
class drawLine {
draw() {
console.log('画线')
}
}
class drawRect {
draw() {
console.log('画矩形')
}
}
let text = new TEXT();
console.log('text', text.Draw('line').draw())
总结:
简单工厂的优点,在于只需要一个正确的参数,就可以获取所需要的对象,而无需知道其创建的具体细节。但是在函数内,包含了所有对象的创建逻辑,和判断逻辑的代码,每增加新的构造函数还需要修改判断逻辑代码,当我们对象过多的情况下,就难以维护了。所以简单工厂只能作用于创建的对象数量较少,对象的创建逻辑不复杂使用。
三。工厂方法模式:
工厂方法模式的本意是将实际创建对象的工作推迟到子类中,这样核心就变成了抽象类。但是在js中很难像传统面向对象那样去实现创建抽象类。所以在js中我们需要参考他的核心思想。我们将工厂方法看作是一个实例化对象的工厂类,他只做实例化对象这一件事情。
其实,可以简单理解为一个体育用品的工厂,可以生产球类、护具类等,然后球类里面还包含篮球,足球这些。工厂父类负责定义创建产品对象的公共接口,而工厂子类则负责生成具体的产品对象。这样做的目的是将产品类的实例化操作延时到工厂子类中完成,即通过工厂子类来确定究竟应该是实例化哪一个具体产品类。
class TEXT {
constructor() {
if(new.target === TEXT){
throw new Error('抽象类不能实例化!');
}
}
}
class DrawAll extends TEXT {
Draw(val) {
var draw;
switch(val) {
case 'line':
draw =new drawLine();
break;
case 'rectangle':
draw = new drawRect();
break;
}
return draw;
}
}
class drawLine {
draw() {
console.log('画线')
}
}
class drawRect {
draw() {
console.log('画矩形')
}
}
const drawAll = new DrawAll();
console.log('111', drawAll.Draw('line').draw())
JS 简单工厂模式,工厂模式(二)的更多相关文章
- js 简单的滑动3
js 简单的滑动教程(三) 作者:Lellansin 转载请标明出处,谢谢 在前面的基础上(js 简单的滑动教程(二)),我们可以再添加一些功能使程序的可用性更高. 比如自动为图片的LI赋id值, ...
- js 简单的滑动2
js 简单的滑动教程(二) 作者:Lellansin 转载请标明出处,谢谢 现在我们让滑动多一个功能,三张图.点击左边向左滑动,点右向右滑,碰到临界值的时候可以循环滑动 原理也很将简单,用posi ...
- Java设计模式之工厂模式(简单工厂模式+工厂方法模式)
摘自http://blog.csdn.net/jason0539/article/details/23020989 在面向对象编程中, 最通常的方法是一个new操作符产生一个对象实例,new操作符就是 ...
- 面向对象JS基础讲解,工厂模式、构造函数模式、原型模式、混合模式、动态原型模式
什么是面向对象?面向对象是一种思想!(废话). 面向对象可以把程序中的关键模块都视为对象,而模块拥有属性及方法.这样我们如果把一些属性及方法封装起来,日后使用将非常方便,也可以避免繁琐重复的工作.接下 ...
- js面向对象小结(工厂模式,构造函数,原型方法,继承)
最近过了一遍尼古拉斯泽卡斯的高级程序设计第三版(红皮书)第六章:面向对象程序设计,现在把总结出来的东西和大家分享一下. 主要内容如下: 1.工厂模式 2.构造函数模式 3.原型模式 4.继承 一.工厂 ...
- C#设计模式之5:简单工厂和工厂方法模式
工厂模式包含三种,简单工厂模式,工厂方法模式,抽象工厂模式.这三种都是解决了一个问题,那就是对象的创建问题.他们的职责就是将对象的创建和对象的使用分离开来. 当我们创建对象的时候,总是会new一个对象 ...
- 简单工厂模式&策略模式-简介与区别
不得不说,这两种模式真的很像. 相似点:都用到了面向对象的继承.多态.抽象,都拥有相似的结构. 不同点:工厂模式仅提供具体的实例对象,怎么使用这个对象是client的自由,策略模式client可以通过 ...
- JS面向对象基础讲解(工厂模式、构造函数模式、原型模式、混合模式、动态原型模式)
什么是面向对象?面向对象是一种思想. 面向对象可以把程序中的关键模块都视为对象, 而模块拥有属性及方法. 这样如果我们把一些属性及方法封装起来,日后使用将非常方便,也可以避免繁琐重复的工作. 工厂 ...
- windows服务 MVC之@Html.Raw()用法 文件流的读写 简单工厂和工厂模式对比
windows服务 public partial class Service1 : ServiceBase{ System.Threading.Timer recordTimer;public S ...
随机推荐
- android TextView加载html 过滤所有标签,保留换行标签
情景: TextView加载后端接口获取到的html富文本 遇到的问题: 客户端通过接口取到的数据如下: <p style="margin-top: 0px; margin-botto ...
- 使用nc传输文件和目录【转】
方法1,传输文件演示(先启动接收命令) 使用nc传输文件还是比较方便的,因为不用scp和rsync那种输入密码的操作了 把A机器上的一个rpm文件发送到B机器上 需注意操作次序,receiver先侦听 ...
- 2018-2019-2-20175225 实验一 《Java开发环境的熟悉》实验报告
2018-2019-2-20175225 实验一 <Java开发环境的熟悉>实验报告 一.实验内容及知识点 实验内容 1.使用JDK编译.运行简单的Java程序: 2.使用IDEA编辑.编 ...
- 如何用java实现一个p2p种子搜索(3)-dht协议实现
dht协议实现 上一篇完成了路由表的实现,建立了路由表后,我们还要对路由表进行初始化,因为一开始路由表为空,所以我们需要借助一些知名的dht网络中的节点,对这些节点进行find_node,然后一步步初 ...
- js数据结构与算法——队列
<script> //创建一个队列 function Queue(){ let items = []; //向队尾添加一个新的项 this.enqueue = function(eleme ...
- js 对象,数组,字符串,相互转换
1:对象转换数组 let obj = {'val1':1, 'val2':2, 'val3':3, 'val4':4}; var arr = [] for (let i in obj) { //取键 ...
- P4098 [HEOI2013]ALO
最近这个家伙去哪了,为啥一直不更博客了呢?原来他被老师逼迫去补了一周的文化课,以至于不会把班里的平均分拉掉太多.好了,我们来看下面这道题目: P4098 [HEOI2013]ALO 题目描述 Welc ...
- GraphQL 01--- GraphQL 介绍及资源总结
作为一位web开发人员,在使用REST API的时候,是否遇到过这样的问题: 1.调用一个API的时候,总是会返回一些不需要的信息. 2. 对于一个资源的调用,如果想获取到更多的信息,可能需要发送多次 ...
- KVM 热迁移
最终我们迁移的目的就是: ·简化系统维护管理 ·高系统负载均衡 ·增强系统错误容忍度 ·优化系统电源管理 热迁移 又叫动态迁移,实时迁移,即虚拟机保存( save )/恢复( restore ):将整 ...
- C语言博客作业2--循环结构
1.1 思维导图 1.2 本章学习体会及代码量学习体会 1.2.1 学习体会 对本章学习感觉相对前面的难度有较大提升,而且刚开始对嵌套循环比较陌生,像龟兔赛跑和输出菱形都是用了较长时间才完成,所以我认 ...