传智播客旗下技术交流社区北京校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 不二晨 黑马程序员官方团队   /  2019-1-13 12:52  /  82 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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

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

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

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

五大设计原则:

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

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

单一职责原则:每个then中的逻辑只做好一件事
开放封闭原则:如果新增需求,直接通过新增then()扩展即可,因为then()返回一个新的promise对象,所以可以链式调用,并且catch()方法也返回一个新的promise对象,所以后面也可以接新的then()
---------------------
【转载,仅作分享,侵删】
作者: 一期一会
原文:https://blog.csdn.net/qq_34832846/article/details/86221583


分享至 : QQ空间
收藏

1 个回复

倒序浏览
奈斯
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马