1 工厂模式

简单的工厂模式可以理解为解决多个相似的问题;

  1. function CreatePerson(name,age,sex) {
  2. var obj = new Object();
  3. obj.name = name;
  4. obj.age = age;
  5. obj.sex = sex;
  6. obj.sayName = function(){
  7. return this.name;
  8. }
  9. return obj;
  10. }
  11. var p1 = new CreatePerson("longen",'28','男');
  12. var p2 = new CreatePerson("tugenhua",'27','女');
  13. console.log(p1.name); // longen
  14. console.log(p1.age); //
  15. console.log(p1.sex); // 男
  16. console.log(p1.sayName()); // longen
  17.  
  18. console.log(p2.name); // tugenhua
  19. console.log(p2.age); //
  20. console.log(p2.sex); // 女
  21. console.log(p2.sayName()); // tugenhua

2单例模式

只能被实例化(构造函数给实例添加属性与方法)一次

  1. // 单体模式
  2. var Singleton = function(name){
  3. this.name = name;
  4. };
  5. Singleton.prototype.getName = function(){
  6. return this.name;
  7. }
  8. // 获取实例对象
  9. var getInstance = (function() {
  10. var instance = null;
  11. return function(name) {
  12. if(!instance) {//相当于一个一次性阀门,只能实例化一次
  13. instance = new Singleton(name);
  14. }
  15. return instance;
  16. }
  17. })();
  18. // 测试单体模式的实例,所以a===b
  19. var a = getInstance("aa");
  20. var b = getInstance("bb");

3 沙箱模式

将一些函数放到自执行函数里面,但要用闭包暴露接口,用变量接收暴露的接口,再调用里面的值,否则无法使用里面的值

  1. let sandboxModel=(function(){
  2. function sayName(){};
  3. function sayAge(){};
  4. return{
  5. sayName:sayName,
  6. sayAge:sayAge
  7. }
  8. })()

4 发布者订阅模式

就例如如我们关注了某一个公众号,然后他对应的有新的消息就会给你推送,

  1. //发布者与订阅模式
  2. var shoeObj = {}; // 定义发布者
  3. shoeObj.list = []; // 缓存列表 存放订阅者回调函数
  4.  
  5. // 增加订阅者
  6. shoeObj.listen = function(fn) {
  7. shoeObj.list.push(fn); // 订阅消息添加到缓存列表
  8. }
  9.  
  10. // 发布消息
  11. shoeObj.trigger = function() {
  12. for (var i = 0, fn; fn = this.list[i++];) {
  13. fn.apply(this, arguments);//第一个参数只是改变fn的this,
  14. }
  15. }
  16. // 小红订阅如下消息
  17. shoeObj.listen(function(color, size) {
  18. console.log("颜色是:" + color);
  19. console.log("尺码是:" + size);
  20. });
  21.  
  22. // 小花订阅如下消息
  23. shoeObj.listen(function(color, size) {
  24. console.log("再次打印颜色是:" + color);
  25. console.log("再次打印尺码是:" + size);
  26. });
  27. shoeObj.trigger("红色", 40);
  28. shoeObj.trigger("黑色", 42);

代码实现逻辑是用数组存贮订阅者, 发布者回调函数里面通知的方式是遍历订阅者数组,并将发布者内容传入订阅者数组

更多设计模式请戳:Javascript常用的设计模式详解

JS常见的四种设计模式的更多相关文章

  1. js常见的几种设计模式

    一.单例模式 单例模式也称作为单子模式,更多的也叫做单体模式.为软件设计中较为简单但是最为常用的一种设计模式. 在JavaScript里,实现单例的方式有很多种,其中最简单的一个方式是使用对象字面量的 ...

  2. JS函数的四种调用模式

    函数在js中具有四种身份,分别为函数.方法.构造函数.apply或call调用 函数调用    函数调用模式中this指全局对象(window) var f1 = function() { alert ...

  3. 下面给出了四种设计模式的作用: 外观(F

    下面给出了四种设计模式的作用: 外观(Fa?ade :为子系统中的一组功能调用提供一个一致的接口,这个接口使得这一子系统更加容易使用: 装饰(Decorate):当不能采用生成子类的方法进行扩充时,动 ...

  4. 判断数组的方法/判断JS数据类型的四种方法

    参考文: 以下 3 个判断数组的方法,请分别介绍它们之间的区别和优劣Object.prototype.toString.call() . instanceof 以及 Array.isArray() h ...

  5. js检测数据类型四种办法

    面试题中经常会考js数据类型检测,今天我来分享一下js中常用的四种方法判断数据类型,欢迎指点更正. 废话不多说,直入正题. 1.typeof console.log(typeof "&quo ...

  6. 判断js数据类型的四种方法,以及各自的优缺点(转)

    转载地址:https://blog.csdn.net/lhjuejiang/article/details/79623973 数据类型分为基本类型和引用类型: 基本类型:String.Number.B ...

  7. HttpRequest中常见的四种Content-Type(转)

    add by zhj: Content-Type用于说明request body的编码格式的,对于没有request body的http method如GET,HEAD没有必要设置这个参数,当然,你设 ...

  8. Robot Framework--接口测试中常见的四种POST方式

    写接口测试用例时,遇到以json格式提交数据时,报错,Request如下图: Response如下图: 改成form格式提交,可以正常运行,如下图: 代码如下: ------------------- ...

  9. Android下常见的四种对话框

    摘要:在实际开发过程有时为了能够和用户进行很好的交互,需要使用到对话框,在Android中常用的对话框有四种:普通对话框.单选对话框.多选对话框.进度对话框. 一.普度对话框 public void ...

随机推荐

  1. Intellij Idea:创建带签名的APK

    步骤如下: 1. 选择菜单Build -> Generate Signed APK… 2. 创建或选择已存在的Key Store(选择已存在的Key Store的话直接跳到第5步) 3. 输入K ...

  2. SQL 用户定义表类型,在存储过程里使用数据类型作參数

    在数据库编程里使用数据类型,能够提高代码的重用性.它们常常被使用在方法和存储过程中.使用数据类型,我们能够避免在存储过程里定义一串的參数,让人眼花缭乱,它就相当于面向对象语言里.向一个方法里传入一个对 ...

  3. 【SSH之旅】一步步学习Hibernate框架(一):关于持久化

    在不引用不论什么框架下,我们会通过平庸的代码不停的对数据库进行操作,产生了非常多冗余的可是又有规律的底层代码,这样频繁的操作数据库和大量的底层代码的反复书写极大的浪费了程序人员的书写.就在这样一种情况 ...

  4. IBM CEO罗睿兰:科技公司屹立百年的3个秘诀

    假设有不论什么科技公司能够完美阐释"转型"这个词的含义,那么这家公司非创立103年的IBM莫属. 如今,它的变化更胜以往. 在<財富>杂志周二于美国加利福尼亚州拉古纳尼 ...

  5. Verilog堵塞赋值与非堵塞赋值

    verilog设计进阶 时间:2014年5月6日星期二 主要收获: 1.堵塞赋值与非堵塞赋值: 2.代码測试: 3.组合逻辑电路和时序逻辑电路. 堵塞赋值与非堵塞赋值: 1.堵塞赋值"=&q ...

  6. 大学,助你成长or 让你堕落?

    不管是论坛.贴吧.还是博客,都或多或少能够看到诸如对大学教育的反思.抨击之类的文章.至于什么是大学,大学又该怎样度过.大学是助你成长还是让你堕落了?我想这应该是一个见仁见智的问题.作为一个过来人,结合 ...

  7. Oracle EBS 从Web界面进入责任时,提示不存在可用的有效责任

    Oracle EBS 从Web界面进入责任时,提示不存在可用的有效责任         每次在Web界面,点击某一责任的功能时,弹出Form.会提示错误:对不起,不存在可用的有效责任.         ...

  8. iOS中的多线程NSThread/GCD/NSOperation & NSOperationQueue

    iOS多线程有四套多线程方案: Pthreads NSThread GCD NSOperation & NSOperationQueue 接下来我来一个一个介绍他们 Pthreads 在类Un ...

  9. VC问题 IntelliSense:“没有可用的附加信息”,[请參见“C++项目 IntelliSense 疑难解答”,获得进一步的帮助]

    在XP上安装VS2010 后发现 IntelliSense不能使用,但在Windows7上是能够正常使用这功能的.关于IntelliSense不能使用的问题已有网友提出了是由于KB2876217这个补 ...

  10. leetcode第一刷_Same Tree

    回来更博客的时候才发现.这道题不是跟推断树是不是对称的很相像吗.这个也是用了两个指针同一时候递归啊,有时候思维的局限真可笑. class Solution { public: bool isSameT ...