2011-02-22 62 views
0

我有一個類 - 叫它ThankYou,它提供了這些。基於不同的實現,通用或Facebook,我需要提供自定義佈局。現在,我在JS中構建HTML並提供佈局。使用哪種模式

1)註冊電子郵件通訊(仿製和Facebook實現) 2)預告內容(通用實現) 3)Facebook的喜歡(對於Facebook三江源實現)

哪些設計模式,你認爲這使用工廠還是調解員更好地實施?我剛剛開始在代碼中使用一些設計模式,並希望從右腳開始。

一些注意事項: 一)雖然其功能可能是相同的,佈局可能是通用和Facebook不同

如果我不使用設計模式,我可以很容易地做到這一點使用一個「如果'聲明,但我只是尋找更優雅的解決方案。

回答

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