什么是代码质量
优化代码结构的设计模式
策略模式/状态模式
例子
- 目的:优化if-else分支
- 应用场景:当代码if-else分支过多时
假如要编写一个计算器, 有加减乘除,我们可以把一层一层的if判断,变成这样的形式
策略模式基本结构
function Strategy(type, a, b){
var Strateger = {
add: function(a,b){
return a+b;
},
minus: function(a,b){
return a-b;
},
division: function(a,b){
return a/b;
},
}
return Strateger[type](a,b);
}
状态模式的基本结构
function stateFactor(state){
var stateObject = {
_state: "",
state: {
state1: function(){ },
state2: function(){ },
},
run: function(){
return this.state[this._state]()
},
}
stateObject._state = state;
return stateObject
}
stateFactor('state1').run();
外观模式
- 目的:通过为多个复杂的子系统提供一个一致的接口
- 应用场景:当完成一个操作,需要操作多个子系统,不如提供一个更高级的
基本结构
// 我们在组织方法模块时,可以细化多个接口,但是我们给别人使用时,要合为一个接口,就像你可以直接去餐厅点套餐
// 模块1
function Model1(){}
// 模块2
function Model2(){}
// 功能由model1和model2的结果来完成
function use(){
Model2(Model1())
}
优化代码操作的设计模式
迭代器模式
目的:不访问内部的情况下,方便的遍历数据
- 应用场景:当我们要对某个对象进行操作,但是又不能暴露内部
基本结构
// 在不暴露对象内部结构的同时,可以顺序的访问对象内部,可以帮助我们简化循环,简化数据操作
function Iterator(item){
this.item = item;
}
Iterator.prototype.dealEach = function(){
for(var i = 0; i< this.item.length; i++){
fn(this.item[i],i);
}
}
备忘录模式
目的:记录状态,方便回滚
- 应用场景:当状态多样, 为了保证状态的回滚方便, 记录状态
- 基本结构
/// 记录对象内部的状态, 当有需要时回滚之前的状态或者方便对象使用
function Memento(){
var cache = {};
return function(cacheName){
if(cache[cacheName]){
// 有缓存的操作
}else {
// 没有缓存的操作
}
}
}
var MementoFn = Memento();
MementoFn("xxx")