js几种常见的设计模式
一、工厂模式
//方式一 : 一次只能创建一个对象 //缺点 : 创建多个同类对象时,代码会重复
var obj = {"sname":"jack","study" :function(){console.log("学习ing");}};var obj2 = new Object();obj2.sname = "lily";obj2.study = function(){console.log( "学习ing" );}
工厂模式
function student(name, age) {var obj = new Object()obj.name = nameobj.age = agereturn obj}var stu1 = student('xiao li', 18)var stu2 = student('xiao yuan', 18)console.log( stu1 instanceof Object )
二、单例模式
function Animal(name){this.name = name;
}
var a1 = new Animal("小白");
var a2 = new Animal("大白");
console.log( a1 == a2 );
//要求 : a1 == a2 返回true 单例模式
function Student() {if (!Student.instance) {Student.instance = {age: 3,name: 'xiao',}}return Student.instance}var s1 = new Student()s1.age += 4var s2 = new Student()console.log(s1 = s2) // trueconsole.log(s2.age) // 7
三、代理模式
function Mx(){this.sing = function(){console.log( "可以开演唱会..." );}
}function Jjr(){this.sing = function(money){if( money >= 200000000 ){//通知主人 可以开演唱会啦new Mx().sing();}}
}var jj = new Jjr();
jj.sing( 200000001 );
四、适配器模式
function Ipad(){this.music = function(){console.log( "ipad可以播放音乐" );}}//定义一个适配器 判读产品功能function Adapter(pro){this.pro = pro;//某个商品this.music = function(){if( this.pro.music ){console.log("可以播放音乐")}else{console.log("不可以播放音乐")}}this.phone = function(){if( this.pro.phone ){console.log("可以打电话")}else{console.log("不可以打电话")}}}var ipad = new Ipad();var adapter = new Adapter(ipad);adapter.music();adapter.phone();
五、策略模式
function Child(dad,mum){this.dad = dad;this.mum = mum;this.cry = function(){//小孩哭了 通知 爸爸 开始冲奶了this.dad.weinai();}//观察者模式(异步现象)setTimeout( function(){this.cry();}.bind(this),Math.random()*5000+200 )}function Dad(){this.weinai = function(){console.log( "开始给孩子喂奶了" );}}var dad = new Dad();var ch = new Child(dad , null);
六、发布订阅模式和观察者模式
class EventEmitter {constructor() {this.subs = Object.create(null)}// { 'click': [fn1, fn2], 'change': [fn] }$on(eventType, handler) {this.subs[eventType] = this.subs[eventType] || []this.subs[eventType].push(handler)}$emit(eventType) {if (this.subs[eventType].forEach(handler => {handler()}))}
}// 测试let em = new EventEmitter()em.$on('click', () => {console.log('click1')})em.$on('click', () => {console.log('click2')})em.$on('fn', ()=> {console.log('fn')})em.$emit('click')em.$emit('fn')
七、观察者模式
class Dep {constructor() {this.subs = []}addSub(sub) {if (this.sub && this.sub.update) {this.subs.push(sub)}}notify() {this.subs.forEach(sub => {sub.update()})}
}
class Watch {update() {console.log('update')}
}let dep = new Dep()
let watcher1 = new Watcher()
let watcher2 = new Watcher()
dep.addSub(watcher1)
dep.addSub(watcher2)
dep.notify()
js几种常见的设计模式相关推荐
- js几种常见的递归方法
js几种常见的递归方法 递归的概念:就是函数调用函数本身,或者在自己函数调用的下级调用函数自己: 案例1:求和,1-100 function sun(n){if(n==1) return 1} 案例2 ...
- JS几种常见的用户名检测
本博客主要讲述关于JS的几种常见的用户名检测.包括 一.不能以数字开头–isNaN() // isNaN 是一个系统的函数,用于判断一个变量是否为 NaN //strings指的是要判断对象 //st ...
- Java中有哪几种常见的设计模式
Java中一般认为有23种设计模式,分别是: 1.创建型模式,五种:工厂方法模式,抽象工厂模式,单例模式,建造者模式,原型模式: 2.结构型模式,七种:适配器模式,装饰器模式,代理模式,外观模式,桥接 ...
- Java几种常见的设计模式
--------------------- 本文来自 旭日Follow_24 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/xuri24/article/detail ...
- JavaEE5种常见的设计模式
1.工厂模式:比如你写了个应用,里面用到了数据库的封装,你的应用可以今后需要在不同的数据库环境下运行,可能是oracle,db2,sql server等, 那么连接数据库的代码是不一样的,你用传统的方 ...
- 前端:JS几种常见的排序
1.冒泡排序 依次比较相邻的两个元素,如果后一个小于前一个,则交换,这样从头到尾一次,就将最大的放到了末尾. 动画演示: 代码: function bubbleSort(arr) {var len = ...
- js几种常见排序的实现
1. 冒泡排序 定义: 比较相邻的前后二个数据,如果前面数据大于后面的数据,就将二个 数据交换. 这样对数组的第0个数据到N-1个数据进行一次遍历后,最大的一个数据就"沉"到数组 ...
- 7 种 Javascript 常用设计模式学习笔记
7 种 Javascript 常用设计模式学习笔记 由于 JS 或者前端的场景限制,并不是 23 种设计模式都常用. 有的是没有使用场景,有的模式使用场景非常少,所以只是列举 7 个常见的模式 本文的 ...
- Ajax 和 XML: 五种常见 Ajax 模式
Asynchronous JavaScript + XML(Ajax)无疑是 2006 年最热门的技术术语,且有望在 2007 得到进一步发展.但是对您的应用程序来说它究竟有什么意义呢?Ajax 应用 ...
- php mysql设计中常问_PHP开发中常见的设计模式
一.工厂模式 工厂模式是我们最常用的实例化对象模式,是用工厂方法代替new操作的一种模式. 使用工厂模式的好处是,如果你想要更改所实例化的类名等,则只需更改该工厂方法内容即可,不需逐一寻找代码中具体实 ...
最新文章
- win服务器发展方向是什么?
- python3 for循环怎么用_Python3入门系列之-----循环语句(for/while)
- Java 8里的Predicate学习笔记
- (4)编写一个程序,输出三角形字符阵列图形
- easyui mysql手册_easyui api 中文
- java spring log4j_配置spring的log4j日志记录
- 八种不要钱的男士护肤方法 - 生活至上,美容至尚!
- Ubuntu18.04 32位下载
- 网络——局域网和广域网
- html复制并弹窗提示已复制,如何调用handsome主题自带的弹窗提示实现复制弹窗提醒以及个性化提示...
- TCP 握手没成功怎么办?
- 高级驾驶辅助系统ADAS简介
- IPad Pro 12.9英寸版本的界面适配
- 东辉职校计算机专业录取分数线,2016年上海东辉职校录取分数
- 保护眼睛的Windows和IE、Firefox、谷歌等浏览器颜色设置
- Qwt使用之QwtPlot
- Koch科赫雪花的实现
- 二进制推广者电子计算机,31-戏说计算机与二进制那点事儿
- 1 计算机主机里面都有些什么东西,电脑主机配件有哪些 电脑主机配件介绍【详解】...
- 《游戏脚本的设计与开发》-(RPG部分)3.1 RPG地图到底怎么做?
热门文章
- 基于.net开发chrome核心浏览器【六】
- c语言结构体stamp是什么意思,stamp是什么意思
- java多级部门数据权限设计_数据权限设计(转载)
- 图论邮递员问题程序代码_图论的简短实用程序员指南
- 2022手机号段大全、归属运营商整理—2022.01.04更新(包含三大运营商)
- 天正电气图例_天正电气CAD教程之符号篇 - CAD自学网
- RuntimeError: Exporting the operator prim_DictConstruct to ONNX opset version 11 is not supported.
- 真实经历,说一说本人苹果ipad mini2官方799元以旧换新真实操作
- 注意力缺陷障碍可以通过​训练大脑来管理
- 平均值绝对偏差最大c语言,请教平均值和最大偏差值得使用