《Node.js开发实战详解》学习笔记

          ——持续更新中

  一、NodeJS设计模式

    1 . 单例模式

    顾名思义,单例就是保证一个类只有一个实例,实现的方法是,先判断实例是否存在,如果存在则直接返回,若不存在,则创建实例对象,并将实例对象保存在静态变量中,当下次请求时,则可以直接返回这个对象实例,这就确保了一个类只有一个实例对象。举个例子吧~一间学校刚刚起建还没有图书馆,有的同学就向领导提意见:"hey! 哥们,能不能帮我们建一个图书馆? "(想要一个图书馆实例),然后领导说:"no problem啊!等我一下,马上建给你"(实例还没有建立,便创建一个)。几个月后,图书馆建好了~有位奇葩同学也想去图书馆,他却向领导提出要求: "hey! 哥们,我想去图书馆,能不能帮我建一个?"然后领导说: "no problem个头阿!那边已经建好了一个,你去那间不就可以了吗!"(当实例已经存在的时候,则直接返回已经创建的实例)

/*singleInstance.js*/
var _instace = null;//定义初始化_instance
module.exports = function(time){function Car(time){this.time = time;}this.getInstance = function(){if(_instance != null){return _instance}else{return new Car(time)}     }
}    

    2. 适配器模式

      若将一个类的接口转换为客户希望的另外一个接口,适配器模式可以使原本由于接口不兼容而不能一起工作的那些类可以一起工作。举个例子吧~小明的老爸大明很爱喝白酒,但是呢喝酒又伤身,小明看到便不忍心,于是他想了方法:把白酒瓶子里面的酒倒掉,换成了白开水(重写内容)。大明看到还是那个酒瓶就没太在意(接口没有改变,只是内容改变了),一口气就把"酒"喝完了,还很高兴~(此处假设大明智商比较低..)。因此支配器是一个既不得罪他人,也能达到自己目的的一个好方法~下面是具体的实现方法

/*target.js*/
module.exports = function(){this.request = function(){//原接口console.log('Target::request');}
}

/*adapter.js*/
var util = require('util');
var Target = require('./target.js');
var Adaptee = require('./adaptee.js');function Adapter(){Target.call(this);this.request = function(){//重写原接口var adapteeObj = new Adaptee();//重写的内容
        adapteeObj.specialRequest();}
}
util.inherits(Adapter, Target);//通过继承原模块, 获得原接口
module.exports = Adapter;

    3. 装饰模式

     装饰模式可以通过继承的方式,为一个基类对象扩展功能。举个例子吧~一颗圣诞树,一开始什么都没有。然后Amy看到之后往树上挂了几个饰品(扩展原来的基类),然后Billy路过之后,觉得它还差点什么,就把圣诞树拿过来(继承),然后也往上面放点其他饰品(继续扩展)。

/*Base.js*/
module.exports = function(){this.dosomething = function(){console.log("Nice to meet u.");}
}

/*Decorator.js*/
var util = require("util);
var Base = require('./Base');function Decorator(){Base.call(this);this.dosomething = function(){Base.dosomething();console.log('I am a decorator');//拓展内容}
}
util.inherits(Decorator, Base);//继承
module.exports = Decorator;

     4. 观察者模式

    什么是观察者模式呢?举个例子吧~小狗同学和小熊同学同时喜欢上了班里可爱的小兔同学。小狗和小熊都会注意着小兔的一举一动,只有小兔有什么动静他们两个都会知道~相对而言呢,小狗和小熊就是小兔的"观察者",而小兔呢就是"被观察的对象"。比较重要的是:小兔发生的动静(某个函数),会同时通知到观察者小狗和小熊,让他们两个也会做出相应的反馈(各自的回调函数)

/*被观察者*/
module.exports = function(){var m_obserSet = [];//观察者列表var _self = this;this.addObser = function(observer){m_obserSet.push(observer);//添加观察者
    }this.doAction = function(){console.log("Observable do some action");_self.notifyAllObeser();}this.notifyAllObeser = function(){//发生动作for(var key in m_obserSet){//逐个通知观察者m_obserSet[key].update();//观察者执行回调
        }}}

转载于:https://www.cnblogs.com/BestMePeng/p/NodeJS_Note_1.html

《Node.js开发实战详解》学习笔记相关推荐

  1. 第二行代码学习笔记——第六章:数据储存全方案——详解持久化技术

    本章要点 任何一个应用程序,总是不停的和数据打交道. 瞬时数据:指储存在内存当中,有可能因为程序关闭或其他原因导致内存被回收而丢失的数据. 数据持久化技术,为了解决关键性数据的丢失. 6.1 持久化技 ...

  2. 第一行代码学习笔记第二章——探究活动

    知识点目录 2.1 活动是什么 2.2 活动的基本用法 2.2.1 手动创建活动 2.2.2 创建和加载布局 2.2.3 在AndroidManifest文件中注册 2.2.4 在活动中使用Toast ...

  3. 第一行代码学习笔记第八章——运用手机多媒体

    知识点目录 8.1 将程序运行到手机上 8.2 使用通知 * 8.2.1 通知的基本使用 * 8.2.2 通知的进阶技巧 * 8.2.3 通知的高级功能 8.3 调用摄像头和相册 * 8.3.1 调用 ...

  4. 第一行代码学习笔记第六章——详解持久化技术

    知识点目录 6.1 持久化技术简介 6.2 文件存储 * 6.2.1 将数据存储到文件中 * 6.2.2 从文件中读取数据 6.3 SharedPreferences存储 * 6.3.1 将数据存储到 ...

  5. 第一行代码学习笔记第三章——UI开发的点点滴滴

    知识点目录 3.1 如何编写程序界面 3.2 常用控件的使用方法 * 3.2.1 TextView * 3.2.2 Button * 3.2.3 EditText * 3.2.4 ImageView ...

  6. 第一行代码学习笔记第十章——探究服务

    知识点目录 10.1 服务是什么 10.2 Android多线程编程 * 10.2.1 线程的基本用法 * 10.2.2 在子线程中更新UI * 10.2.3 解析异步消息处理机制 * 10.2.4 ...

  7. 第一行代码学习笔记第七章——探究内容提供器

    知识点目录 7.1 内容提供器简介 7.2 运行权限 * 7.2.1 Android权限机制详解 * 7.2.2 在程序运行时申请权限 7.3 访问其他程序中的数据 * 7.3.1 ContentRe ...

  8. 第一行代码学习笔记第五章——详解广播机制

    知识点目录 5.1 广播机制 5.2 接收系统广播 * 5.2.1 动态注册监听网络变化 * 5.2.2 静态注册实现开机广播 5.3 发送自定义广播 * 5.3.1 发送标准广播 * 5.3.2 发 ...

  9. 第一行代码学习笔记第九章——使用网络技术

    知识点目录 9.1 WebView的用法 9.2 使用HTTP协议访问网络 * 9.2.1 使用HttpURLConnection * 9.2.2 使用OkHttp 9.3 解析XML格式数据 * 9 ...

  10. 安卓教程----第一行代码学习笔记

    安卓概述 系统架构 Linux内核层,还包括各种底层驱动,如相机驱动.电源驱动等 系统运行库层,包含一些c/c++的库,如浏览器内核webkit.SQLlite.3D绘图openGL.用于java运行 ...

最新文章

  1. 商用机型和家用机型区别
  2. 数据中心迎来重大利好消息,工商业电价降低10%
  3. 软件业的作业示意流程图
  4. php接口和java接口_java和php接口的区别是什么
  5. vue项目打包:npm run build 进程卡死
  6. 浅谈Flutter的状态State
  7. 一些SAP Partners能够通过二次开发实现打通C/4HANA和S/4HANA的方法介绍
  8. 工厂模式——三个工厂模式(简单工厂模式,工厂方法模式,抽象工厂模式)...
  9. C#之DateTime
  10. 如何将根文件系统制作成yaffs格式,并设置从yaffs启动
  11. html乱码原因与网页乱码解决方法
  12. html5音乐播放器在线生成,一款极简的HTML5音乐播放器-skPlayer
  13. access数据库代做_矿井三维模型(代做矿山模型)
  14. java面向对象数组实现家庭收支记账软件_golang实战--家庭收支记账软件(面向过程)...
  15. 前端页面崩溃现象处理
  16. 什么是正向代理和反向代理
  17. CPU执行程序的原理(简化过程)
  18. OBS Studio 录制视频画面很糊,不清晰,如何解决?
  19. 单、多分支结构的应用(有点复杂)
  20. idea社区版的安装和安装中文插件

热门文章

  1. 云中漫步 - 3:2013-4-27 微软云体验营北京站
  2. 【转】C#3.0入门系列(九)-之GroupBy操作
  3. 数智德州,创新未来 | 智慧城市赛题上线山东大赛德州分赛场
  4. 百度开源业内首个口罩人脸检测及分类模型,携手开发者共同“抗疫”
  5. 编译原理 计算机科学丛书_计算机科学导论(二)
  6. 面部识别数据研究:43年,100个数据集
  7. 卷积神经网络CNN是靠什么线索学习到深度信息的?
  8. Github | 标星9W+如何准备谷歌面试?
  9. 深度学习最常用的学习算法:Adam优化算法
  10. 机器学习(二)逻辑回归