使用哪种模式

时间:2011-02-22 22:48:40

标签: javascript design-patterns

我有一个课 - 叫它谢谢你提供这些。基于不同的实现,通用或Facebook,我需要提供定制的布局。现在,我正在使用JS构建HTML并提供布局。

1)注册电子邮件简报(用于通用和Facebook实施) 2)预告片内容(用于通用实施) 3)Facebook喜欢(对于Facebook ThankYou实施)

您认为使用 - Factory或Mediator可以更好地实现哪种设计模式?我刚刚开始在我的代码中使用一些设计模式,并希望从右脚开始。

一些说明: a)虽然功能可能相同,但通用和Facebook的布局可能不同

如果我不使用设计模式,我可以使用'if'语句轻松完成此操作,但我只是在寻找更优雅的解决方案。

1 个答案:

答案 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);