PCL-几个设计模式

2020-01-10  本文已影响0人  死鱼

门面模式

就是utils,可以简单理解为工具类

// daoUtils
module.exports = {
    get : async (param)=>{ ... },
    set : async (param)=>{ ... },
    delete : async (param)=>{ ... },
    update : async (param)=>{ ... }
}

简单工厂模式

把一个类型的所有方法封装到一起,例如用户的所有增删改查行为,都存到一个模块里面。但是每次创建的时候,都要传一个用户类型进去加以区分。例如用户类型有手机用户、微信用户、微博用户等等。
例如:

// userModel
module.exports = {
    create : async (type, param)=>{ ... },
    update : async (type, param)=>{ ... }
}

工厂方法模式

简单工厂的方法不够抽象,用户类型都要写死到函数里面switch,而工厂模式则是直接把类型分支细化出去。工厂模式注重的是零件生产。
例如:

// userModel
module.exports = {
    qqUser : {
        functions ...
    },
    wechatUser : {
        functions ...
    },
    weiboUser : {
        function ... 
    }
}

构造模式

工厂模式把东西分支出去之后,仍然不够,构造模式是在创建的时候,就有定制化的属性区分,重点在于构造的过程,例如:

// userModel
module.expots = {
    qqUser : {
        create : async (param)=>{
            return userObject;
        },
        build : async (userObject, param)=>{
            // 写入属性参数
            userObject = setParam(userObject, param);
            return userObject
        }
    }
}

抽象工厂模式

例如如果正常情况下是这样

// userModel
module.exports = {
    qqUser : {
        normalUserFunctions ...
    }
}

假如现在有个需求,qq用户要区分成普通用户和会员用户。
这个时候,就要把qqUser里面的function区分开来。就要区分不同的用户类型,具体实例化不同的对象。

// userModel
module.exports = {
    qqUser : {
            normalMap : {},menberMap : {}, // 两个map注入到下面的创建过程中去
            functions .... 
    }
}

适配器模式

转接头,如果类中的方法无法使用或者不存在需要的接口方法,在原本的方法中,调用新的静态类的方法即可。例如原本qqUser类如下

// userModel
module.exports = {
    qqUser : function(){
        this.getUserName = ()=>{return this.name};
        return this;
    }
}

现在想在getUserName的时候log一下他的名字

// userModel

var qqUserUtils = {
    logName : (user)=>{console.log(user.name);}
}

module.exports = {
    qqUser : function(){
        this.getUserName = ()=>{
            qqUserUtils.logName(this);
            return this.name
        };
        return this;
    }
}
上一篇 下一篇

猜你喜欢

热点阅读