Javascript乱弹设计模式系列(2) - 抽象工厂以及工厂方法模式(Factory)
2010-09-14 13:35:26 来源:WEB开发网4. MemberFactory.js不变,从简单工厂直接复制。
5. 添加IBlock.js,创建布局接口:
varIBlock=newInterface("IBlock",[["getData"]]);
6. 实现它的具体类,这里添加LMRBlock.js(左 中 右 布局),LRMBlock.js(左上 左下 右 布局),MLRBlock.js(左 右上 右下 布局),这里以LMRBlock.js为例:
//左、中、右结构样式版块
functionLMRBlock()
{
this.color="blue";
Interface.registerImplements(this,IBlock);//继承布局IBlock接口
}
LMRBlock.prototype={
displayBlock:function(){
this.getData();
//具体布局实现
},
getData:function(){
returnnewError("抽象方法,不能调用");
}
}
这里首先创建的是类似于一个抽象类,该类首先继承于布局接口,从代码中可以看出getData方法的实现返回错误异常,实际上它作为一个抽象方法,不需要实现任何东西;这里displayBlock方法中调用它的抽象方法,这里就是典型的抽象方法模式,以备于它的子类继承实现它的抽象方法;
现在看看它的子类有哪些:
functionBlueLMRBlock(){
}
inheritClass(BlueLMRBlock,LMRBlock);//继承LMRBlock抽象类
BlueLMRBlock.prototype.getData=function(){//父类抽象方法的具体实现
$(".tabs-nava,.tabs-navaspan").css({"background-image":"url(script/tab/tab_blue.png)"});
this.color="blue";
}
functionGreenLMRBlock(){
}
inheritClass(GreenLMRBlock,LMRBlock);
GreenLMRBlock.prototype.getData=function(){
$(".tabs-nava,.tabs-navaspan").css({"background-image":"url(script/tab/tab_green.png)"});
this.color="green";
}
functionRedLMRBlock(){
}
inheritClass(RedLMRBlock,LMRBlock);
RedLMRBlock.prototype.getData=function(){
$(".tabs-nava,.tabs-navaspan").css({"background-image":"url(script/tab/tab_red.png)"});
this.color="red";
}
functionVioletLMRBlock(){
}
inheritClass(VioletLMRBlock,LMRBlock);
VioletLMRBlock.prototype.getData=function(){
$(".tabs-nava,.tabs-navaspan").css({"background-image":"url(script/tab/tab_violet.png)"});
this.color="violet";
}
更多精彩
赞助商链接