2011-05-05 87 views
3

在一個我正在開發的項目中,我們擁有嚴格的MVC結構。我想添加一個裝飾模式的一些模式窗口(微小的彈出窗口)爲那些實現我whant一些額外的功能。MVC與Decorator模式

所以我basicly具備以下條件:

SimpleModalWindowController.class 
SimpleModalWindowModel.class 
SimpleModalWindowView.class 

編輯: 問題:是否有可能實施新ModalWindows implemenations在這樣的裝飾圖案或我應該去繼承?我會有很多不同的窗口,我希望將來可以結合一些功能。

如果我按裝飾模式走,什麼類應該是抽象類?

它是一個類將SimpleModal.class等所有類組合成一個抽象類,或者我有多個抽象類?

我對這種模式顯然是新的,只有平均的OOP技能,所以請耐心等待。

感謝您的任何幫助。

/Marthin

+0

我不認爲這有資格作爲一個裝飾圖案。你要做的是創建具有專業化(Fancy)的繼承層次結構。 – 2011-05-05 09:18:46

回答

1

我不認爲這有資格作爲一個裝飾圖案。你要做的是創建具有專業化(Fancy)的繼承層次結構。

您不需要實施裝飾器。你正在執行的方式看起來很好,如果這是解決設計問題。在這種情況下,您不必使用模式。

這是如何實現一個你不需要的裝飾器。我是一個C#人,因此語法可能不完全正確。

abstract class ModalWindowModel 
{ 
    protected ModalWindowModel modalWindowModel; //This can be any class implementing/derived from ModalWindowModel 
} 

class SimpleModalWindowModel extends ModalWindowModel 
{ 
SimpleModalWindowModel(ModalWindowModel modalWindowModel) 
{ 
    this.modalWindowModel = modalWindowModel; 
} 


// your other code goes here 
} 

class FancyModalWindowModel extends ModalWindowModel 
{ 
FancyModalWindowModel(ModalWindowModel modalWindowModel) 
{ 
    this.modalWindowModel = modalWindowModel; 
} 

// your other code goes here 
} 

... 
// Usage 
ModalWindowModel simpleModalWindowModel = new SimpleModalWindowModel(null); 
ModalWindowModel fancyModalWindowModel = new FancyModalWindowModel(simpleModalWindowModel); 
.... 
1

就我個人而言,我會把它作爲裝飾者來實現。我通常更喜歡構圖而不是繼承variety of reasons。這樣,我會做這樣的事情:

class ExtendedModalWindowModel { 
    private ModalWindowModel model; 
    public ExtendedModalWindowModel(ModalWindowModel model) { 
     if (model == null) throw IllegalArgumentException("..."); 
     this.model = model; 
    } 

    // delegate common methods to the parent 
    public int getSize() { 
     // you could also put additional functionality here... 
     return model.getSize(); 
    } 

    // implement new functionality on the decorator 
    public void doNewThings() { 
     // ... 
    } 
} 

如果您的裝飾類實現tnterfaces,你也應該實現它們的裝飾(但仍委託給裝修實例的執行,除非你想擴展或覆蓋基功能)。

組成一個很好的例子是I/O的在Java中實現:http://download.oracle.com/javase/1.4.2/docs/api/java/io/InputStream.html