java - 什么样的设计模式适合这里?

标签 java design-patterns

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


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

有人可以帮我找出适合我的问题的设计模式吗?

我想到了装饰器模式,但不知怎的,它并没有让我的船航行。

~NN

最佳答案

你可以适应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();
     }
}

关于java - 什么样的设计模式适合这里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26135541/

相关文章:

c++ - 在 C++ 中制作单例 Mixin 类

java - 为什么 JTextArea.append() 不显示任何内容?

java - Hibernate 标准如何不加载子进程

java - 我可以使用具有自定义属性名称的properties/yml 文件配置@FeignClient url 吗?

c++ - 数据流编程 - 模式和框架

.net - 什么被认为是多个相似类的良好设计

java - 数据表中的 JSF 2.0 commandLink

java - 意外输出 "this.getClass().getSuperclass()"

design-patterns - Builder.build() 应该返回默认状态吗?

entity-framework - 不使用存储库模式,按原样使用 ORM (EF)