javascript设计模式学习之十七——程序设计原则与面向接口编程
一、编程设计原则
1)单一职责原则(SRP):
这里的职责是指“引起变化的原因”;单一职责原则体现为:一个对象(方法)只做一件事。
事实上,未必要在任何时候都一成不变地遵守原则,实际开发中,因为种种原因违反SRP的情况并不少见,比如jQuery中的attr方法,既负责赋值,又负责取值。这对于jQuery的维护者来说,带来了一些困难,然而对于jQuery的用户来说,则方便了使用。
因此很多时候,需要在方便性和稳定性之间有一些取舍。
2)最少知识原则(LKP):
最少知识原则是说,一个软件实体应当尽可能少地与其他实体发生相互作用。这里的软件实体是一个广义的概念,不仅包括对象,也包括系统、类、模块、函数、变量等。
最少知识原则体现最多的地方是中介者模式和外观模式。与封装不同的是,封装侧重于体现数据的隐藏,而最少知识原则则侧重于减少对象之间的联系。
3)开放—封闭原则(OCP):
在面向对象程序设计中,开放—封闭原则是最重要的一项原则。几乎所有的设计模式的初衷都是为了满足这一原则,该原则定义如下:
软件实体(类、模块、函数)等可以扩展,但不可以被修改。即:当需要变动 一个程序的功能或者给这个程序增加新功能的时候,可以通过增加代码的方式,但是不允许更改程序的源代码。
二、接口和面向接口编程
接口的含义有很多:
1)通常说一个库对外提供了某某API接口。这里的接口是指通过主动暴露的接口来通信,可以隐藏软件系统内部的工作细节。
2)第二种接口是指某些语言提供的关键字,如java中的interface;
3)第三种是指“面向接口编程”中的接口,这里的接口体现的更为抽象,指的是对象能响应的请求的集合。
2.1 java中的面向接口编程:
在java中,面向接口编程通常采用的方法有两种:1)抽象类;2)interface
java中的抽象类主要有两个作用:1)向上转型,实现多态;2)建议一些契约;
java中的interface也可以达到同样的效果,虽然很多人在实际使用中刻意区分抽象类和interface,但是实际上interface也是继承的一种方式,叫做接口继承。interface同样可以用于向上转型和订立契约。
2.2 javascript中的面向接口编程
对于javascript而言,因为javascript是一门动态的语言,类型本身就是一个模糊的概念,不需要利用抽象类或者interface给对象进行“向上转型”,或者说,是天生可以向上转型的。即在动态类型语言中,对象的多态性是与生俱来的。
因为不需要进行向上转型,因此接口在javascript中的最大作用就退化到了检查对象的规范性。动态语言中广泛采用“鸭子类型”的思想:
“如果它走起来像鸭子,叫起来也是鸭子,那么它就是鸭子”
这种思想运用的地方很多,如一个对象如果有length属性,也可以根据数字下标来存取属性,该对象就可以当做数组来使用。一个对象如果有push和pop方法,就能当做栈来使用。
例如如果利用鸭子类型的思想来判断一个对象是否是数组,方法如下:
var isArray=function(obj){
return obj&& typeof obj ==='object'&&typeof obj.length==='number' &&typeof obj.splice==='fucntion';
};
javascript设计模式学习之十七——程序设计原则与面向接口编程的更多相关文章
- [原创]java WEB学习笔记27:深入理解面向接口编程
本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...
- C#设计模式学习笔记:设计原则
本笔记摘抄自:https://www.cnblogs.com/PatrickLiu/p/8287784.html,记录一下学习过程以备后续查用. 写代码也是有原则的,我们之所以使用设计模式,主要是为了 ...
- JavaScript设计模式经典-面向对象中六大原则
作者 | Jeskson来源 | 达达前端小酒馆 1 主要学习JavaScript中的六大原则.那么六大原则还记得是什么了吗?六大原则指:单一职责原则(SRP),开放封闭原则(OCP),里氏替换原则( ...
- Javascript设计模式学习一
学习Javascript设计模式之前,需要先了解一些相关知识,面向对象的基础知识.this等重要概念,以及掌握一些函数式编程的技巧. Js多态 多态的思想:实际上是把“做什么”和“谁去做”分离开来.例 ...
- JavaScript设计模式学习之路——面向对象的思想
今天,我拿到了张容铭写的这本<JavaScript设计模式>这本书,开始了关于JavaScript更深一点的学习. 看到这本书开始的时候,虽然之前通过看书.一些比较好的视频的讲解,对Jav ...
- java设计模式学习笔记--单一职责原则
单一职责原则注意事项和细节 1.降低类的复杂度,一个类只负责一项职责 2.提高可读性,可维护性 3.降低变更引起的风险 4.通常情况下,我们应当遵守单一职责原则,只有逻辑足够简单,才可以在代码级违反单 ...
- JavaScript设计模式学习笔记
1 JavaScript设计模式深入分析 私有属性和方法:函数有作用域,在函数内用var 关键字声明的变量在外部无法访问,私有属性和方法本质就是你希望在对象外部无法访问的变量. 特权属性和方法:创建属 ...
- Java设计原则:面向接口的设计
前言:在一个面向对象的系统中,系统的各种功能是由许许多多的不同对象协作完成的.在这种情况下,各个对象内部是如何实现对系统设计人员来说就不那么重要:而各个对象之间的协作关系则成为系统设计的关键.小到不同 ...
- javascript设计模式学习之十六——状态模式
一.状态模式的定义 状态模式的关键是区分事务内部和外部的状态,事务内部状态改变往往会带来事务的行为改变. 状态模式中有意思的一点是,一般我们谈到封装,都是优先封装对象的行为,而非对象的状态.但在状态模 ...
随机推荐
- thrift
环境准备: 1.下载window版本的thrift编译器 2.下载idea的thirft插件 3.设置thrift编译工具为:步骤1下载的编译器 4.编写thrift文件 namespace java ...
- linux消息队列的使用及内核实现原理
mq_receive NAME mq_open - open a message queue SYNOPSIS #include <fcntl.h> /* For O_* constant ...
- UVALive 2635 匈牙利算法
题意 给出k块地 规模n*m 需要在每块地中找至多一块h*w的地 这些地中如果包含字母 只能包含一种字母 如果一块地中选地使用了A 其余的地就不能使用A 但是全0可以重复 问 最后能最多选出来多少块地 ...
- Apache Storm 衍生项目之2 -- Trident-ML
欢迎转载,转载请注明出处,徽沪一郎,谢谢. 楔子 或许谈起storm是大数据实时计算框架已经让你不明觉厉,如果说storm还可以跟机器学习算法(ml)有机的结合在一起,是不是更加觉着高大尚呢.trid ...
- Javascript 笔记与总结(2-3)Javascript 运算符、控制结构与对象操作
[连接运算符 + ] <script> console.log(1+2+'a'+3+4); </script> 输出: 3a34 [逻辑运算符]返回的是最早能判断表达式结果的那 ...
- linux下创建和删除软、硬链接
linux下创建和删除软.硬链接 在Linux系统中,内核为每一个新创建的文件分配一个Inode(索引结点),每个文件都有一个惟一的inode号.文件属性保存在索引结点里,在访问文件时,索引结点被复制 ...
- LR中的C语言问题
今天在调试LR的脚本(C)时遇到了几个甚是头痛得问题,下面简单总结下: 1.首先LR中的C编译器遵循C90标准,规定在一个函数中,变量定义必须放在所有的执行语句之前!一旦在运行语句之间再有定义的话,会 ...
- HQL之多表查询(一对多和多对多)
一.一对多 以班级Classes和学生Student为例: 回忆sql语句: //内链接,两种方式效果一样,查询的是两边都有的数据 SELECT c.*,s.* FROM classes c,st ...
- GATT 服务器与客户端角色
两个设备应用数据的通信是通过协议栈的GATT层实现的.从GATT角度来看,当两个设备建立连接后,他们处于以下两种角色之一: GATT服务器: 它是为GATT客户端提供数据服务的设备 GATT客户端: ...
- hiveserver2以及beeline客户端的使用
一:开启服务 1.启动前端的hiveserver2 按住ctrl+c就可以结束这个服务. 2.怎么知道已经开启的服务 如果进程在后台,可以查出来,kill这些进程. 3.后端开启服务 二:beelin ...