封装、信息隐藏与接口的关系

信息隐藏是目的,封装是手段。

接口提供了一份记载着可供公共访问的方法的契约。它定义了两个对象间可以具有的关系。只要接口不变,这个关系的双方都是可以替换的。

一个理想的软件系统应该为所有类定义接口。

创建对象的基本模式

1.门户大开型

var Publication = new Interface('Publication', ['getIsbn', 'setIsbn',...]); //接口
var Book = function(isbn, title, author){this.setIsbn(isbn);this.setTitle(title);this.setAuthor(author);
};
Book.prototype = {checkIsbn: function(){...},getIsbn: function(){return this.isbn,}, //取值器setIsbn: function(isbn){this.isbn=isbn;}, //赋值器
    ...
};

接口+门户大开+取值器/赋值器是门户大开型创建对象所能达到的最好效果了。

2.命名规范区别私有成员。

var Publication = new Interface('Publication', ['getIsbn', 'setIsbn',...]); //接口
var Book = function(isbn, title, author){this.setIsbn(isbn);this.setTitle(title);this.setAuthor(author);
};
Book.prototype = {checkIsbn: function(){...},getIsbn: function(){return this._isbn,}, //取值器setIsbn: function(isbn){this._isbn=isbn;}, //赋值器
    ...
};

没错,就是在变量的名字前面加个_来区别私有变量,这个也是众所周知的一种命名规范。

3.闭包实现私有成员

var Book = function(newIsbn, newTitle, newAuthor){var isbn, title, author; //私有function checkIsbn(isbn){} //私有this.getIsbn = function(){ //特权return isbn;};this.setIsbn = function(newIsbn){ //特权if(!checkIsbn(ewIsbn)) throw new Error('Book: invalid ISBN.');isbn = newIsbn;}
};Book.prototype = { display: function(){ //公有
        ...};
};

所谓特权方法就是说这个方法既是公用方法缺能够访问私有变量,故此称之为特权方法。

4.静态方法和属性(注意匿名函数是神来一笔)

前面创建对象时的大多数方法和属性所关联的是类的实例,而静态成员所关联的是类本身。每个静态成员只有一份。

var Book = (function(){var numOfBooks = 0; //private static attributefunction checkIsbn(){...}; //private static methodreturn function(newIsbn, newTitle, newAuthor){var isbn, title, author; //private attribute//privileged methodsthis.getIsbn = function(){return isbn;};this.setIsbn = function(){...};numOfBooks ++;if(numOfBooks > 50){throw new Error('Book: Only 50 instances of Book can be created.');}this.setIsbn(newIsbn);...};
})();//Public static method
Book.convertToTitleCase = function(){...
};//Public, non-privileged methods
Book.prototype = {display: function(){...}
};

想想闭包,琢磨一下numOfBooks这个变量,就知道这是怎么一回事了。

常量

在JS中我们可以通过创建只有取值器而没有赋值器的变量来模仿常量。具体的就不给出代码了。

转载于:https://www.cnblogs.com/JChen666/p/3582069.html

JS设计模式——3.封装与信息隐藏相关推荐

  1. C++ 封装 信息隐藏

    C++ 封装 & 信息隐藏 概述 类的公用接口 类的私有实现 方法与消息 概述 封装是面向对象编程中的把数据和操作数据的函数绑定在一起的一个概念. 这样能避免受到外界干扰和误用. 数据隐藏包括 ...

  2. js设计模式笔记小结

    JS 设计模式 面向对象 搭建开发环境 npm / webapck / webpack-dev-server / babel babel-core babel-loader babel-polyfil ...

  3. js observer 添加_简单了解4种JS设计模式

    阅读本文约需要5分钟 大家好,我是你们的导师,我每天都会在这里给大家分享一些干货内容(当然了,周末也要允许老师休息一下哈).上次老师跟大家分享了15款有用前端开发的ST插件的知识,今天跟大家分享下4种 ...

  4. js设计模式与开发实践(读书笔记)

    1 面向对象的js 1.1 动态类型语言和鸭子类型 编程语言按数据类型可分成静态类型和动态类型语言,其中js属于动态类型语言,对一个变量赋值时,不需要考虑其类型. 鸭子类型: 通俗理解,只要走起路来像 ...

  5. 软件工程与计算II-13-详细设计中的模块化与信息隐藏

    13-详细设计中的模块化与信息隐藏 1. 内聚和耦合 概念重要 内聚:内聚表达的是一个模块内部的联系的紧密型:包括信息内聚.功能内聚.通信内聚.过程内聚.时间内聚.逻辑内聚和偶然内聚. public ...

  6. Node.js毕业设计——基于Node.js+JavaScript+MongoDB的供求信息网站设计与实现(毕业论文+程序源码)——供求信息网站

    基于Node.js+JavaScript+MongoDB的供求信息网站设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于Node.js+JavaScript+MongoDB的供求信息网站设计 ...

  7. JS设计模式之Module(模块)模式、Revealing Module(揭示模块)模式

    Module(模块)模式 概念 Module模式最初被定义为一种在传统软件工程中为类提供私有和共有封装的方法. 通过这种方式,能够使一个单独的对象拥有共有/私有方法和变量,从而屏蔽来自全局作用局的特殊 ...

  8. JS面向对象编程之封装

    我们所熟知的面向对象语言如 C++.Java 都有类的的概念,类是实例的类型模板,比如Student表示学生这种类型,而不表示任何具体的某个学生,而实例就是根据这个类型创建的一个具体的对象,比如zha ...

  9. 【转】第7篇:Xilium CefGlue 关于 CLR Object 与 JS 交互类库封装报告:全自动注册与反射方法分析...

    作者: 牛A与牛C之间 时间: 2013-12-12 分类: 技术文章 | 2条评论 | 编辑文章 主页 » 技术文章 » 第7篇:Xilium CefGlue 关于 CLR Object 与 JS ...

最新文章

  1. 《深入浅出iPhone/iPad开发(第2版)》——在Xcode中建立你的界面
  2. Kernel i2c gpio spi pinctrl platform 分析讲解 (未完待续)
  3. notepad++ vim插件_是时候摒弃掉Notepad++ ,因为你还有更多的选择...
  4. 2011目标 及 总结
  5. 信息如何实现病毒式传播?一文看懂Gossip协议
  6. 计算机加一块硬盘,老电脑卡顿不一定没救了 加一块SSD就能焕发新生
  7. Spring: 事务传播机制
  8. php 人像识别,基于OpenCV的PHP图像人脸识别技术
  9. EE214 Lecture 14 Differential pair部分公式推导
  10. Matlab对语音信号做fft及对语音信号进行分帧加窗
  11. 想知道表格文字识别怎么弄?分享2个表格识别的方法
  12. 为什么我们的数据还不够开放?
  13. 京东上位2018年财富中国500强民企第一席 首次实现全年盈利
  14. s5pv210 linux,S5PV210-零基础体验uboot
  15. 极客日报:HarmonyOS 2.0用户数升至5000万;腾讯起诉抖音侵权《王者荣耀》,获赔60万?抖音:没侵权,已上诉!
  16. 没有项目经验找工作处处碰壁怎么办
  17. 百面机器学习01-特征工程
  18. gitbook 插件 文章 TOC 目录
  19. word交叉引用后,移动文章结构,修改引用顺序到符合引用先后
  20. Java视频教程(浙江大学翁恺)

热门文章

  1. 区块链将带来怎样的应用?
  2. 区块链技术到底有啥用?
  3. unix odbc php 连接sqlserver,Ubuntu下通过unixODBC连接MS SqlServer2005
  4. Python培训常识:Python面试中常被问到的几种设计模式要知道
  5. 关于 synchronizeOnSession
  6. Django模型层Meta内部类详解
  7. ControlButton按钮事件
  8. Python学习系列(六)(模块)
  9. java参数传递:值传递还是引用传递
  10. [转]程序员技术练级攻略