Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 什么样的设计模式适合这里?_Java_Design Patterns - Fatal编程技术网

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

Java 什么样的设计模式适合这里?,java,design-patterns,Java,Design Patterns,我正在开发一个具有REST端点的应用程序,对于Get By ID服务,我正在通过从持久存储中收集数据来填充资源(基本上是POJO)。现在,在返回响应之前,我必须在POJO资源中填充HREF。我想以一种通用的方式来做,这样其他各种REST服务(搜索等)都可以使用它。为了可重用性,我想在一个公共场所进行此操作。简而言之,我的资源POJO可以通过不同的按摩层来改变不同的状态,并最终发送回消费者 Resource POJO --> Massager 1 --> Massager 2 --> Final

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

Resource POJO --> Massager 1 --> Massager 2 --> Final Massaged POJO 资源POJO-->按摩器1-->按摩器2-->最终按摩器POJO 有人能帮我找出一个适合我的问题的设计模式吗

我想到了装饰图案,但不知怎么的,它并不能使我的船航行

~NN

你可以根据自己的需要进行调整。您可以先处理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-->按摩器2
类之间的通信。通过这样做,它将封装您的对象交互。它还通过防止对象之间显式地相互引用来促进松散耦合,并允许您独立地改变它们的交互

如果您要处理如何通知更改为
按摩器1-->按摩器2

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


然后,可以定义对象之间的依赖关系,以便当一个对象更改状态时,其所有依赖项都会自动通知和更新。

责任链模式如何?根据创建HREF作为对其他对象的引用:这应该由您使用的REST框架实现。在一个网络应用程序中,你也不会关心链接的生成……非常感谢你;这些都是非常好的想法,我们已经在应用程序中实现了很多模式。对于我的问题,正如其他人建议的,我将采用责任链模式。感谢Daniel提供的示例代码。我相信这种模式可以帮助我解决我的问题,我会坚持下去。