JavaScript设计模式之抽象工厂及工厂方法模式(1)(2)
实例分析
在开始工厂模式之前,有必要先介绍下简单工厂的说法,为了避免在客户程序的对象出现"if...else..."代码难以扩展以及维护,这里创建一个工厂类来封装这些对象,那这个就应用了简单工厂的方式。
这个场景是这样,有个博客网站,在网站中用户分为几种类型,我这里暂且暂且分为游客,博客会员,超级管理员三种用户权限:
◆游客只能进行简单的查看博客的文章,个人资料等等;
◆博客会员还可以对自己的博客进行管理;
◆超级管理员还可以对于博客系统后台进行管理。
在开始介绍之前,先贴出前两篇介绍的一些接口和类继承的JS文件InterfaceAndClass.js,这里主要要说的是类继承的写法:
function inheritClass(subClass, superClass)
{
var Func = function() {};
for(p in superClass.prototype)
{
Func.prototype[p] = superClass.prototype[p];
}
subClass.prototype = new Func();
subClass.prototype.constructor = subClass;
}
|
这里将父类superClass原型的所有方法赋值给新创建的函数类,之后把函数类的原型赋值于子类subClass原型中。
一、现在先对JavaScript简单工厂进行介绍:
1. 添加用户类型接口IMember.js:
var IMember = new Interface("IMember", [["getMemberInfo"]]);
|
getMemberInfo做为IMember接口的接口方法。
2. 添加三个具体用户类型的类Guest.js,BlogMember.js,SuperAdmin.js,继承IMember接口:
//游客类
function Guest() {
Interface.registerImplements(this, IMember); //继承IMember接口
}
Guest.prototype = {
getMemberInfo : function() {
return "游客";
},
getData : function() {
return "";
}
}
//博客会员类
function BlogMember() {
Interface.registerImplements(this, IMember);
}
BlogMember.prototype = {
getMemberInfo : function() {
return "博客会员";
},
getData : function() {
return "";
}
}
//超级管理员类
function SuperAdmin() {
Interface.registerImplements(this, IMember);
}
SuperAdmin.prototype = {
getMemberInfo : function() {
return "超级管理员";
},
getData : function() {
return "";
}
}






