2014-10-01 230 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