2014-10-01 217 views
2

我正在處理具有REST端點和Get-By-ID服務的應用程序,我通過從持久性存儲中收集數據來填充資源(基本上是POJO)。現在,在發回響應之前,我必須在POJO資源中填充HREF。我想以通用的方式來完成,以便各種其他REST服務(搜索等)可以使用它。我想在一個共同的地方做這個HREF人羣以實現可重用性。簡而言之,我的資源POJO可以通過各種按摩層來改變不同的狀態,並最終返回給消費者。這裏適合什麼設計模式?

 

    Resource POJO --> Massager 1 --> Massager 2 --> Final Massaged POJO 

有人能幫我弄清楚一個適合我的問題的設計模式。

我想到了裝飾者模式,但不知何故,它不航行我的船。

〜NN

+2

責任鏈模式如何? – SimY4 2014-10-01 06:56:33

+0

根據創建HREFS作爲其他對象的引用:應該使用您正在使用的REST框架來實現。在一個網絡應用程序,你不關心鏈接代... – Andy 2014-10-01 06:59:02

回答

4

你能適應Chain Of Responsability您的需求。您可以處理您的POJO並進一步傳遞它,而不是將一個POJO從一個POJO傳遞到另一個的一系列處理對象,而無法處理它。

abstract class Messager{ 

    private Messager nextMessager; 

    void setNextMessager(Messager messager){ 
     this.nextMessager = messager; 
    } 

    Messager getNextMessager(){ 
     return this.nextMessager; 
    } 

    abstract void handle(Pojo pojo); 
} 

class FooMessager extends Messager{ 

    void handle(Pojo pojo){ 
     //operate on your pojo 
     if(pojo.getHref == null){ 
      pojo.setHref("broken"); 
     } 

     if(this.getNextMessager() != null){ 
      this.getNextMessager().handle(pojo); 
     } 

    } 
} 

class BarMessager{ 

    void handle(Pojo pojo){ 
     //operate on your pojo 
     if(pojo.getHref().contains("broken")){ 
      pojo.setHref(pojo.getHref().replace("broken","fixed")); 
     } 

     if(this.getNextMessager() != null){ 
      this.getNextMessager().handle(pojo); 
     } 

    } 

} 

class Pojo{ 

    private String href; 

    public Pojo() { 
    } 

    public String getHref() { 
     return href; 
    } 

    public void setHref(String href) { 
     this.href = href; 
    } 

} 

class Test{ 

    public static void main(String[] args) { 

     Pojo pojo = new Pojo(); 
     pojo.setHref(null); 

     Messager foo = new FooMessager(); 
     Messager bar = new BarMessager(); 
     foo.setNextMessager(bar); 

     foo.handle(); 
    } 
} 
+0

感謝丹尼爾的示例代碼。我相信這種模式可以幫助我解決我的問題,並且我正在與此合作。 – Niranjan 2014-10-04 05:00:14

1

即使以前的答案都很好,並且確實解決了它,如果您想進一步考慮,我想提議給您另外的方法。對象之間的通信非常普遍,所以有很多概念,你可以選擇最適合你需求的概念。

Command pattern可以幫助您爲對象的請求封裝在

從持久存儲數據收集

它會允許你參數客戶隊列或日誌請求。

Mediator pattern可以定義您在Massager 1 --> Massager 2類之間的通信。通過這樣做,它會封裝你的對象交互。此外,它通過保持對象不明確互相引用來促進鬆散耦合,並且可以讓您獨立地改變它們的交互。

如果你會怎麼處理通知變更Massager 1 --> Massager 2

我的資源POJO可以去通過各種按摩層有不同的狀態改變

Observer pattern可以定義依賴在一個對象改變狀態時,它的所有依賴關係都會被自動通知和更新。

+0

非常感謝你;這些都是非常好的想法,我們已經在我們的應用程序中實現了不少模式。對於我的問題,正如其他人所建議的,我將採用責任鏈模式。 – Niranjan 2014-10-04 04:58:58