什么是代码质量

1、代码整洁
2、结构规整,没有漫长的结构
3、阅读好理解

优化代码结构的设计模式

策略模式/状态模式

例子

  • 目的:优化if-else分支
  • 应用场景:当代码if-else分支过多时

假如要编写一个计算器, 有加减乘除,我们可以把一层一层的if判断,变成这样的形式
策略模式基本结构

  1. function Strategy(type, a, b){
  2. var Strateger = {
  3. add: function(a,b){
  4. return a+b;
  5. },
  6. minus: function(a,b){
  7. return a-b;
  8. },
  9. division: function(a,b){
  10. return a/b;
  11. },
  12. }
  13. return Strateger[type](a,b);
  14. }

状态模式的基本结构

  1. function stateFactor(state){
  2. var stateObject = {
  3. _state: "",
  4. state: {
  5. state1: function(){ },
  6. state2: function(){ },
  7. },
  8. run: function(){
  9. return this.state[this._state]()
  10. },
  11. }
  12. stateObject._state = state;
  13. return stateObject
  14. }
  15. stateFactor('state1').run();

外观模式

  • 目的:通过为多个复杂的子系统提供一个一致的接口
  • 应用场景:当完成一个操作,需要操作多个子系统,不如提供一个更高级的
  • 基本结构

    1. // 我们在组织方法模块时,可以细化多个接口,但是我们给别人使用时,要合为一个接口,就像你可以直接去餐厅点套餐
    2. // 模块1
    3. function Model1(){}
    4. // 模块2
    5. function Model2(){}
    6. // 功能由model1和model2的结果来完成
    7. function use(){
    8. Model2(Model1())
    9. }

    优化代码操作的设计模式

    迭代器模式

  • 目的:不访问内部的情况下,方便的遍历数据

  • 应用场景:当我们要对某个对象进行操作,但是又不能暴露内部
  • 基本结构

    1. // 在不暴露对象内部结构的同时,可以顺序的访问对象内部,可以帮助我们简化循环,简化数据操作
    2. function Iterator(item){
    3. this.item = item;
    4. }
    5. Iterator.prototype.dealEach = function(){
    6. for(var i = 0; i< this.item.length; i++){
    7. fn(this.item[i],i);
    8. }
    9. }

    备忘录模式

  • 目的:记录状态,方便回滚

  • 应用场景:当状态多样, 为了保证状态的回滚方便, 记录状态
  • 基本结构
    1. /// 记录对象内部的状态, 当有需要时回滚之前的状态或者方便对象使用
    2. function Memento(){
    3. var cache = {};
    4. return function(cacheName){
    5. if(cache[cacheName]){
    6. // 有缓存的操作
    7. }else {
    8. // 没有缓存的操作
    9. }
    10. }
    11. }
    12. var MementoFn = Memento();
    13. MementoFn("xxx")