前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JS中的面向对象设计原则

JS中的面向对象设计原则

作者头像
前端_AWhile
发布2019-08-29 13:13:56
1.1K0
发布2019-08-29 13:13:56
举报
文章被收录于专栏:前端一会前端一会

本篇来讨论为什么程序开发中推荐使用面向对象编程。

程序的执行有几种套路:顺序执行、判断执行和循环执行。我认为的程序其实就是一个个或好或差的单元组成的大单元,计算机对这个大单元进行执行计算的过程。既然这个计算有过程,那肯定就有时间消耗。写的差的程序执行时间就长,写的好的程序执行时间就短。

那怎样才能做到写出更好的程序呢?思考下日常生活,平时我们做一系列事情时,如果事情的条理性好,前后安排合理,就能顺畅的完成。这个对具体事情的合理安排,就是我们做好事情的关键所在。程序也一样,如果程序中的各个小单元能够合理安排、条理清晰、逻辑性强,那么程序执行就会更顺畅更快。这个合理优化的过程,在程序的世界中,就需要通过面向对象的方法来把一个个小单元进行合理结构化。

所以,程序执行不管使用何种套路,都应具有良好的结构化特性。面向对象其实就是把数据进行结构化。程序的编写应遵循简单抽象的总原则。

在面向对象开发中,想要做到简单抽象并不容易,拆分出来的更细粒度原则如下:

五大设计原则:

  • S:单一职责原则
    • 一个程序只做好一件事
    • 如果功能过于复杂就拆分开,每个部分保持独立
  • O:开放封闭原则
    • 对扩展开放,对修改封闭
    • 增加需求时,扩展新代码,而非修改已有代码
    • 这是软件设计的终极目标
  • L:李氏置换原则
    • 子类能够覆盖父类
    • 父类能出现的地方子类就能出现
    • JS中较少使用(弱类型&继承使用较少)
  • I:接口独立原则
    • 保持接口的单一独立,避免出现“胖接口”
    • JS中没有接口,使用较少
    • 类似于单一接口,这里更关注接口
  • D:依赖倒置原则
    • 面向接口编程,依赖于抽象而不依赖于具体
    • 使用方只关注接口而不关注具体类的实现
    • JS中使用较少(没有接口&弱类型)

使用Promise来说明原则 S&O,如果对Promise还不清晰的,可以戳这先回顾

代码语言:javascript
复制
 1var imgSrc = 'http://jspang.com/static/upload/20181213/pvA-e9vkrNiXVFUm6xXMO9zf.jpg';   //此处感谢jspang.com网站提供图片,借用
 2function loadImg(src){
 3    return new Promise(function(resolve, reject){
 4        console.log('promise被new后立即执行的结果');   //小知识点:Promise一new就会立即执行
 5        var img = document.createElement('img');
 6        img.onload = function(){
 7            resolve(img);
 8        }
 9        img.error = function(){
10            reject('图片加载失败')
11        }
12        img.src = src;
13    })
14}
15var res = loadImg(imgSrc);
16res.then(function(img){
17    //resolve
18    console.log(img.width);
19    document.body.appendChild(img);
20}).then(function(){
21    //resolve
22    console.log('这里是当新增需求时扩展的业务代码,新增个then即可');
23}).catch(function(err){
24    //上面所有then的报错都会被此处catch
25    console.log(err);
26})
27/*
28补充知识点:Promise被new后的值的then()方法中有两个回调函数作为参数,分别是resolve和reject,它们接收new过程中resolve和reject参数传递出来的值,对应的未完成-成功和未完成-失败两种状态,但通常then()方法只使用第一个参数
29即resolve回调,而将所有的错误统一由catch()方法捕获即可,这样能在多个then()链式调用睦,都能保证捕获而不用一个个在then()方法中添加reject回调。至于then()能链式调用,是因为then()方法返回的也是一个promise对象
30*/

上例说明:

  • 单一职责原则:每个then中的逻辑只做好一件事
  • 开放封闭原则:如果新增需求,直接通过新增then()扩展即可,因为then()返回一个新的promise对象,所以可以链式调用,并且catch()方法也返回一个新的promise对象,所以后面也可以接新的then()
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-12-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 前端小二 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档