设计模式 应该是分开的,从设计到模式。设计就是按照一种思路或标准来实现功能,相同功能可以有不同设计方案来实现。
五大设计原则:
- S(Single):单一职责原则。一个程序只做好一件事,如果功能过于复杂就拆分开,每个部分保持独立。
- O(Open):开放封闭原则。对扩展开放,对修改封闭。增加需求时,扩展新代码而非修改已有代码。
- L(Liskov人名):李氏置换原则。子类能覆盖父类,父类能出现的地方子类就能出现,JS中使用较少(弱类 & 继承使用较少)。
- I(Interface):接口独立原则。保持接口的单一独立,类似单一职责原则,这里更关注接口。
- D(Dependence):依赖导致原则。开发的时候用抽象化编程而不是具体,JS用的较少。
用 promise 来说明 S O:
function loadImg(src){
let promise = new Promise((resolve,reject) => {
let img = document.createElement('img');
img.onload = function(){
resolve(img);
};
img.onerror = function(){
reject('图片加载失败');
}
img.src = src;
});
return promise;
}
let src = "https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1567141586897&di=61c49ae4eeaf8b0e383924e3a2ab0058&imgtype=0&src=http%3A%2F%2Ff.hiphotos.baidu.com%2Fimage%2Fpic%2Fitem%2Fb151f8198618367aa7f3cc7424738bd4b31ce525.jpg";
let result = loadImg(src); // result 的值是一个 promise
result.then((img) => {
console.log(`width: ${img.width}`);
return img;
}).then(img => {
console.log(`height: ${img.height}`);
}).catch(ex => {
console.log(ex);
})
- 单一职责原则:每个
then
中的逻辑只做好一件事; - 开放封闭原则:如果新增需求,扩展
then
就行了;
设计准则:
- 小即是美
- 让每个程序员只做好一件事
- 快速建立原型
- 舍弃高效率而去可移植性
- 采用纯文本来存储数据
- 充分利用软件的杠杆效应(软件复用)
- 避免强制性的用户界面
- 各部分之和大于整体
23种设计模式具体demo地址:
JavaScript中 23种设计模式