我有一个课 - 叫它谢谢你提供这些。基于不同的实现,通用或Facebook,我需要提供定制的布局。现在,我正在使用JS构建HTML并提供布局。
1)注册电子邮件简报(用于通用和Facebook实施) 2)预告片内容(用于通用实施) 3)Facebook喜欢(对于Facebook ThankYou实施)
您认为使用 - Factory或Mediator可以更好地实现哪种设计模式?我刚刚开始在我的代码中使用一些设计模式,并希望从右脚开始。
一些说明: a)虽然功能可能相同,但通用和Facebook的布局可能不同
如果我不使用设计模式,我可以使用'if'语句轻松完成此操作,但我只是在寻找更优雅的解决方案。
答案 0 :(得分:0)
我认为工厂更适合这种情况。您有一个名为IThankYou的基类(接口),它实现了通用方法,两个类扩展了基本功能。工厂存储类型和类之间的映射。
小示例代码:
function IThankYou () {}
IThankYou.prototype = {
templates: { // this is common field for all instances extending this class
like: '<div class="b-like">Like</div>',
},
like: function () { throw "Unimplemented" }, // this method is not implemented in base class
commonMethod: function () { } // this is common method
};
function GenericThankYou (someParam) { this.someParam = someParam; };
GenericThankYou.prototype = new IThankYou;
GenericThankYou.prototype.like = function () {
// there you could use base class fields and methods
this.commonMethod();
};
function FacebookThankYou (someParam) { this.someParam = someParam; };
FacebookThankYou.prototype = new IThankYou;
FacebookThankYou.prototype.like = function () {
// there you could use base class templates map
};
var ThankYouFactory = {
typeMap: {
'facebook' : FacebookThankYou,
'generic' : GenericThankYou
},
getConstructor: function (type) {
return this.typeMap[type];
}
};
ThankYouFactory.getConstructor('facebook')(ctorParam);
ThankYouFactory.getConstructor('generic')(ctorParam);