美文网首页
PCL-几个设计模式

PCL-几个设计模式

作者: 死鱼 | 来源:发表于2020-01-10 14:33 被阅读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;
        }
    }
    

    相关文章

      网友评论

          本文标题:PCL-几个设计模式

          本文链接:https://www.haomeiwen.com/subject/ofdpactx.html