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设计模式学习之十六——状态模式
一.状态模式的定义 状态模式的关键是区分事务内部和外部的状态,事务内部状态改变往往会带来事务的行为改变. 状态模式中有意思的一点是,一般我们谈到封装,都是优先封装对象的行为,而非对象的状态.但在状态模 ...
随机推荐
- HITOJ 2662 Pieces Assignment(状压DP)
Pieces Assignment My Tags (Edit) Source : zhouguyue Time limit : 1 sec Memory limit : 64 M S ...
- HDU 1671 Phone List(Trie的应用与内存释放)
Phone List Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- nginx不支持pathinfo函数
server { listen ; server_name www.domain.com domain.com; error_page /.html; error_page /50x.html; lo ...
- P4factory <Towards a better behavioral model: bmv2>
尝试使用bmv2行为模型来跑p4实例. 原文说明: We have released a new version of the behavioral model, written in C++. So ...
- php 通过exec 创建git分支失败
今天给我们自己的发布系统增加一个新建分支的功能,操作比较简单,但是使用php执行shell命令的时候总是无法push分支到远程,但是登陆服务器执行却是可以的 新建分支命令如下 git fetch -- ...
- MySQL安装图解教程
安装文件存放路径:不能有中文和空格! 校验 1 安装MySQL 2 校验MySQL 登录MySQL:mysql -uroot -p123 退出MySQL:exit | quit 查看数据库:show ...
- Python中dict的特点、更新dict、遍历dict
dict的第一个特点是查找速度快,无论dict有10个元素还是10万个元素,查找速度都一样.而list的查找速度随着元素增加而逐渐下降. 不过dict的查找速度快不是没有代价的,dict的缺点是占用内 ...
- MongoDB上的索引
1. 将索引建在number键上名为nameIndex并且为正序索引({number:-1}为倒序索引) 如: db.list名.ensureIndex({number:1},{name:" ...
- 设计模式:状态模式(State)
定 义:当一个对象内在状态改变时允许改变其行为,这个对象看起来像是改变了其类. 状态模式主要解决的是当控制一个对象状态转换的条件表达式过于复杂时的情况, 把状态的判断逻辑转移到表示不同状态的一系列子 ...
- struts.xml 配置详解
struts.xml是我们在开发中利用率最高的文件,也是Struts2中最重要的配置文件. 一下分别介绍一下几个struts.xml中常用到的标签 1.<include> 利用includ ...