这里适合哪种设计模式?

时间:2014-10-01 06:43:01

标签: java design-patterns

我正在开发一个具有REST端点和Get-By-ID服务的应用程序,我通过从持久性存储中收集数据来填充资源(基本上是POJO)。现在,在发回响应之前,我必须在POJO资源中填充HREF。我想以通用方式执行此操作,以便各种其他REST服务(搜索等)可以使用它。为了可重用性,我想在一个共同的地方做这个HREF人口。简而言之,我的资源POJO可以通过各种按摩层来改变不同的状态,最后发送给消费者。


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

有人可以帮我找出一个适合我问题的设计模式。

我想到了装饰师的模式,但不知怎的,它不会在我的船上航行。

~NN

2 个答案:

答案 0 :(得分:4)

您可以根据自己的需要调整Chain Of Responsability。您可以处理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();
     }
}

答案 1 :(得分:1)

即使之前的答案很好并且确实解决了这个问题,如果你想进一步的话,我想提出另外的方法。对象之间的通信非常普遍,因此有很多概念,您可以选择最适合您需求的概念。

Command pattern可以帮助您将请求封装为

中的对象
  

从持久性商店收集数据

它允许您使用队列或日志请求参数化客户端。

Mediator pattern可以定义Massager 1 --> Massager 2类之间的通信。通过这样做,它将封装您的对象交互。它还通过使对象明确地相互引用来促进松耦合,并且它可以让你独立地改变它们的交互。

如果您要处理如何通知Massager 1 --> Massager 2班级的更改

  

我的资源POJO可以通过各种按摩层来改变状态

Observer pattern可以定义对象之间的依赖关系,这样当一个对象改变状态时,它的所有依赖关系都会被自动通知和更新。