一、工厂模式

 //方式一 :  一次只能创建一个对象 //缺点 :  创建多个同类对象时,代码会重复
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几种常见的设计模式相关推荐

  1. js几种常见的递归方法

    js几种常见的递归方法 递归的概念:就是函数调用函数本身,或者在自己函数调用的下级调用函数自己: 案例1:求和,1-100 function sun(n){if(n==1) return 1} 案例2 ...

  2. JS几种常见的用户名检测

    本博客主要讲述关于JS的几种常见的用户名检测.包括 一.不能以数字开头–isNaN() // isNaN 是一个系统的函数,用于判断一个变量是否为 NaN //strings指的是要判断对象 //st ...

  3. Java中有哪几种常见的设计模式

    Java中一般认为有23种设计模式,分别是: 1.创建型模式,五种:工厂方法模式,抽象工厂模式,单例模式,建造者模式,原型模式: 2.结构型模式,七种:适配器模式,装饰器模式,代理模式,外观模式,桥接 ...

  4. Java几种常见的设计模式

    --------------------- 本文来自 旭日Follow_24 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/xuri24/article/detail ...

  5. JavaEE5种常见的设计模式

    1.工厂模式:比如你写了个应用,里面用到了数据库的封装,你的应用可以今后需要在不同的数据库环境下运行,可能是oracle,db2,sql server等, 那么连接数据库的代码是不一样的,你用传统的方 ...

  6. 前端:JS几种常见的排序

    1.冒泡排序 依次比较相邻的两个元素,如果后一个小于前一个,则交换,这样从头到尾一次,就将最大的放到了末尾. 动画演示: 代码: function bubbleSort(arr) {var len = ...

  7. js几种常见排序的实现

    1. 冒泡排序 定义: 比较相邻的前后二个数据,如果前面数据大于后面的数据,就将二个 数据交换.  这样对数组的第0个数据到N-1个数据进行一次遍历后,最大的一个数据就"沉"到数组 ...

  8. 7 种 Javascript 常用设计模式学习笔记

    7 种 Javascript 常用设计模式学习笔记 由于 JS 或者前端的场景限制,并不是 23 种设计模式都常用. 有的是没有使用场景,有的模式使用场景非常少,所以只是列举 7 个常见的模式 本文的 ...

  9. Ajax 和 XML: 五种常见 Ajax 模式

    Asynchronous JavaScript + XML(Ajax)无疑是 2006 年最热门的技术术语,且有望在 2007 得到进一步发展.但是对您的应用程序来说它究竟有什么意义呢?Ajax 应用 ...

  10. php mysql设计中常问_PHP开发中常见的设计模式

    一.工厂模式 工厂模式是我们最常用的实例化对象模式,是用工厂方法代替new操作的一种模式. 使用工厂模式的好处是,如果你想要更改所实例化的类名等,则只需更改该工厂方法内容即可,不需逐一寻找代码中具体实 ...

最新文章

  1. win服务器发展方向是什么?
  2. python3 for循环怎么用_Python3入门系列之-----循环语句(for/while)
  3. Java 8里的Predicate学习笔记
  4. (4)编写一个程序,输出三角形字符阵列图形
  5. easyui mysql手册_easyui api 中文
  6. java spring log4j_配置spring的log4j日志记录
  7. 八种不要钱的男士护肤方法 - 生活至上,美容至尚!
  8. Ubuntu18.04 32位下载
  9. 网络——局域网和广域网
  10. html复制并弹窗提示已复制,如何调用handsome主题自带的弹窗提示实现复制弹窗提醒以及个性化提示...
  11. TCP 握手没成功怎么办?
  12. 高级驾驶辅助系统ADAS简介
  13. IPad Pro 12.9英寸版本的界面适配
  14. 东辉职校计算机专业录取分数线,2016年上海东辉职校录取分数
  15. 保护眼睛的Windows和IE、Firefox、谷歌等浏览器颜色设置
  16. Qwt使用之QwtPlot
  17. Koch科赫雪花的实现
  18. 二进制推广者电子计算机,31-戏说计算机与二进制那点事儿
  19. 1 计算机主机里面都有些什么东西,电脑主机配件有哪些 电脑主机配件介绍【详解】...
  20. 《游戏脚本的设计与开发》-(RPG部分)3.1 RPG地图到底怎么做?

热门文章

  1. 基于.net开发chrome核心浏览器【六】
  2. c语言结构体stamp是什么意思,stamp是什么意思
  3. java多级部门数据权限设计_数据权限设计(转载)
  4. 图论邮递员问题程序代码_图论的简短实用程序员指南
  5. 2022手机号段大全、归属运营商整理—2022.01.04更新(包含三大运营商)
  6. 天正电气图例_天正电气CAD教程之符号篇 - CAD自学网
  7. RuntimeError: Exporting the operator prim_DictConstruct to ONNX opset version 11 is not supported.
  8. 真实经历,说一说本人苹果ipad mini2官方799元以旧换新真实操作
  9. 注意力缺陷障碍可以通过​训练大脑来管理
  10. 平均值绝对偏差最大c语言,请教平均值和最大偏差值得使用