工厂模式介绍

将new操作符单独进行封装,遇到new时,就要考虑是否该使用工厂模式

举一个生活当中的示例:

你要去购买汉堡,直接点餐,取餐,不会自己动手做,商店要“封装” 做汉堡的工作,做好直接给购买者,而不是商店给你面粉,工具让你自己去做

UML类图和代码示例

class Product {
constructor (name){
this.name = name
}
init () {
console.log(`init:${this.name}`)
}
fn () {
console.log(`fn:${this.name}`)
}
} class Creator {
create (name) {
return new Product(name)
}
} // 测试
let creator = new Creator()
let p1 = creator.create('p1')
p1.init()
p1.fn()

设计原则验证

构造函数和创建者分离,符合开放封闭原则

场景示例

jQuery - $('div')

Jquery就是工厂模式,向外面暴露一个方法,方法返回一个JQuery对象

class jQuery {
constructor(seletor) {
let slice = Array.prototype.slice
let dom = slice.call(document.querySelectorAll(seletor))
let len = dom ? dom.length : 0
for(let i = 0; i < len; i++){
this[i] = dom[i]
}
this.length = len
this.seletor = seletor || ''
}
append(node){ }
addClass(name){ }
html(data){ }
}
window.$ = function (selector) {
// 工厂模式
return new jQuery(selector)
} // 测试代码
var $p = $('p')
console.log($p)
console.log($p.addClass)

React.createElement(创建虚拟DOM对象的方法)

// 创建虚拟DOM对象
const vDom1 = React.createElement('h1', {id: myId.toLowerCase()}, msg.toUpperCase()) //渲染虚拟DOM
ReactDOM.render(vDom1, document.getElementById('test1'))

vue异步组件

JavaScript设计模式—工厂模式的更多相关文章

  1. javascript 设计模式-----工厂模式

    所谓的工厂模式,顾名思义就是成批量地生产模式.它的核心作用也是和现实中的工厂一样利用重复的代码最大化地产生效益.在javascript中,它常常用来生产许许多多相同的实例对象,在代码上做到最大的利用. ...

  2. JavaScript设计模式——工厂模式

    工厂模式:是一种实现“工厂”概念的面上对象设计模式.实质是定义一个创建对象的接口,但是让实现这个接口的类来决定实例化哪个类.工厂方法让类的实例化推迟到子类中进行.创建一个对象常常需要复杂的过程,所以不 ...

  3. javascript设计模式-工厂模式

    简单工厂模式:使用一个类来生成实例. 复杂工厂模式:使用子类来决定一个成员变量应该是哪个具体的类的实例. 简单工厂模式是由一个方法来决定到底要创建哪个类的实例, 而这些实例经常都拥有相同的接口.通过工 ...

  4. 读书笔记之 - javascript 设计模式 - 工厂模式

    一个类或者对象中,往往会包含别的对象.在创建这种对象的时候,你可能习惯于使用常规方式,即用 new 关键字和类构造函数. 这会导致相关的俩个类之间产生依赖. 工厂模式,就是消除这俩个类之间的依赖性的一 ...

  5. javascript设计模式-工厂模式(简单工厂)

    接口在工厂模式中起着很重要的作用,如果不对对象进行某种类型检查的以确保其实现了必要的方法,工厂模式的好处也就所剩无几了,举个简单的例子. Interface.js // Constructor. va ...

  6. .NET设计模式: 工厂模式

    .NET设计模式: 工厂模式(转) 转自:http://www.cnblogs.com/bit-sand/archive/2008/01/25/1053207.html   .NET设计模式(1): ...

  7. 【设计模式】Java设计模式 -工厂模式

    [设计模式]Java设计模式 -工厂模式 不断学习才是王道 继续踏上学习之路,学之分享笔记 总有一天我也能像各位大佬一样 一个有梦有戏的人 @怒放吧德德 分享学习心得,欢迎指正,大家一起学习成长! 目 ...

  8. javascript设计模式-工厂方法模式

    工厂方法模式笔记  通过对产品类的抽象使其创建业务主要负责用于创建多类产品的实例  对于创建多类对象,简单工厂不太实用,这是简单工厂模式的应用局限,当然这正是工厂方法模式的价值之所在  通过工厂方法模 ...

  9. JavaScript设计模式 - 代理模式

    代理模式是为一个对象提供一个代用品或占位符,以便控制对它的访问 代理模式的用处(个人理解):为了保障当前对象的单一职责(相对独立性),而需要创建另一个对象来处理调用当前对象之前的一些逻辑以提高代码的效 ...

随机推荐

  1. BZOJ3238: [Ahoi2013]差异(后缀自动机)

    题意 题目链接 Sol 前面的可以直接算 然后原串翻转过来,这时候变成了求任意两个前缀的最长公共后缀,显然这个值应该是\(len[lca]\),求出\(siz\)乱搞一下 #include<bi ...

  2. CSS字体无法设置成功的问题

    在 CSS 中设置字体名称,直接写中文是可以的.但是在文件编码(GB2312.UTF-8 等)不匹配时会产生乱码的错误.xp 系统不支持 类似微软雅黑的中文. 方案一: 你可以使用英文来替代. 比如 ...

  3. thinkPHP的几个系统常量

    echo "当前请求:" . __SELF__ . '<br>'; echo "当前分组:" . __MODULE__ . '<br>' ...

  4. egg.js-基于koa2的node.js入门

    一.Egg.JS 简介 Egg.JS是阿里开发的一套node.JS的框架,主要以下几个特点: Egg 的插件机制有很高的可扩展性,一个插件只做一件事,Egg 通过框架聚合这些插件,并根据自己的业务场景 ...

  5. call aplly笔记

    <script> /*1.每个函数都包含两个非继承而来的方法:apply()和call(). 2.他们的用途相同,都是在特定的作用域中调用函数. 3.接收参数方面不同,apply()接收两 ...

  6. runloop timer

    RunLoop这个东西,其实我们一直在用,但一直没有很好地理解它,或者甚至没有知道它的存在.RunLoop可以说是每个线程都有的一个对象,是用来接受事件和分配任务的loop.永远不要手动创建一个run ...

  7. c# 从一个服务器 访问另外一个服务器上的文件

    页面调用 function fnOpen(path) { window.open("~/FileHelp.ashx? url="); //window.open(url); } 后 ...

  8. Python3 循环语句

    Python3 循环语句 转来的  很适合小白   感谢作者   Python中的循环语句有 for 和 while. Python循环语句的控制结构图如下所示: while 循环 Python中wh ...

  9. LOCAL_LISTENER 引起的错误

    1. 如果你的LOCAL_LISTENER 指定的是一个别名 比如L2 *.local_listener='L2' 启动实例的时候 会先到 tnsnames.ora 文件里取查找定义名为L2的TNS服 ...

  10. redis介绍(5)主从复制

    redis的主从复制: 主从复制介绍:redis的主从复制情况下,一个master节点下可以有多个slave节点,而且每个slave节点又可以有很多slave节点,形成很大的集群量级,我简单画个图,如 ...