Какой шаблон использовать - PullRequest
0 голосов
/ 23 февраля 2011

У меня есть класс - назовите его ThankYou, который поставляет их.Исходя из различных реализаций, общих или Facebook, мне нужно предоставить индивидуальный макет.Прямо сейчас я создаю HTML-код в JS и предоставляю макет.

1) Подпишитесь на рассылку новостей по электронной почте (для общей реализации и реализации Facebook) 2) Содержимое тизера (для общей реализации) 3) Facebook like (дляFacebook Спасибо, реализация)

Какой шаблон проектирования, по вашему мнению, лучше реализовать с помощью - Factory или Mediator?Я только начинаю использовать некоторые шаблоны проектирования в своем коде и хотел бы начать с правой ноги.

Некоторые примечания: a) Хотя функциональность может быть одинаковой, макет может отличаться для универсального и Facebook

Если я не использую шаблон дизайна, я мог бы легко сделать это, используяутверждение «если», но я просто ищу более элегантное решение.

1 Ответ

0 голосов
/ 23 февраля 2011

Я думаю, что Фабрика больше подходит в этом случае. У вас есть базовый класс (интерфейс) под названием 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...