门面模式
就是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;
}
}
网友评论