设计原则

01何为设计

  • 即按照哪一种思路或标准来实现功能
  • 《UNIX/LINUX设计思想[哲学]》

《UNIX/LINUX设计思想[哲学]》

  • 准则1:小即是美
  • 准则2:让每个程序只做好一件事
  • 准测3:快速建立原型
  • 准则4:舍弃高效率而取可移植性
  • 准则5:采用纯文本来存储数据(可读性)
  • 准则6:充分利用软件的杠杆效应(软件服用)
  • 准则7:使用shell脚本来提高杠杆效应和可移植性
  • 准则8:避免强制的用户界面(系统和用户界面分离)
  • 准则9:让每个程序都成为过滤器

小准则

  • 小准则:允许用户定制环境
  • 小准则:记录使操作系统内核小而轻量化
  • 小准则:使用小写字母并尽量简写
  • 小准则:沉默是金
  • 小准则:各部分之和大于整体
  • 小准则:寻求90%的解决方案(2/8定律)

02 五大设计原则
SOLID五大设计原则

  • S - 单一职责原则
  • O - 开放封闭原则
  • L - 李氏置换原则
  • I - 接口独立原则
  • D - 依赖倒置原则

S-单一职责原则

  • 一个程序只做好一件事
  • 如果功能过于复杂就拆分开,每个部分保持独立

O-开放封闭原则

  • 对扩展开放,对修改封闭
  • 增加需求时扩展新代码,而非修改已有代码
  • 这是软件设计的终极目标

L-李氏置换原则

  • 子类能覆盖父类
  • 父类能够出现的地方子类就能出现
  • JS中使用较少(弱类型&继承使用较少)

I-接口独立原则

  • 保持接口的单一独立,避免出现“胖接口”
  • JS中没有接口(TS例外),使用较少
  • 类似于单一职责原则,这里更关注接口

D-依赖倒置原则

  • 面向接口编程,依赖于抽象而不依赖于具体
  • 使用方只关注接口而不关注具体类的实现
  • JS中使用较少(没有接口&弱类型)

总结

  • SO体现较多
  • LID体现较少

示例

/**
 * SO示例
 */

function loadImg(src) {
    let promis = new Promise(function (resolve, reject) {
        let img = document.createElement('img');
        img.onload = function () {
            resolve(img);
        }
        img.onerror = function () {
            reject('图片加载失败');
        }
        img.src = src;
    });
    return promis;
}

let src = 'https://www.baidu.com/img/PCtm_d9c8750bed0b3c7d089fa7d55720d6cf.png';
let result = loadImg(src);

result.then(function (img) {
    alert(`width:${img.width}`);
    return img;
}).then(function (img) {
    alert(`height:${img.height}`);
    return img;
}).then(function (img) {
    alert(img.src);
}).catch(function (err) {
    alert(err);
});

03 从设计到模式

  • 设计
  • 模式
  • 分开
  • "从设计到模式"

04 介绍23种设计模式

  • 创建型
  • 组合(结构)型
  • 行为型

创建型

  • 工厂模式(工厂方法模式,抽象工厂模式,建造者模式)
  • 单例模式
  • 原型模式

结构型模式
重点(前端)

  • 适配器模式
  • 装饰器模式
  • 代理模式
  • 外观模式

较少(前端)

  • 桥接模式
  • 组合模式
  • 享元模式

行为型-1

  • 策略模式
  • 模板方法模式
  • 观察者模式
  • 迭代器模式
  • 职责链模式
  • 命令模式

行为型-2

  • 备忘录模式
  • 状态模式
  • 访问者模式
  • 中介者模式
  • 解释器模式

学习

  • 明白每个设计的道理和用意
  • 通过经典应用体会它的真正使用场景
  • 自己编码时多思考,尽量模仿(刻意训练)
posted @ 2020-10-30 15:03  mrtransition  阅读(127)  评论(0)    收藏  举报