2014-10-01 3 views
2

Я работаю над приложением, которое имеет конечные точки REST и для службы Get-By-ID, я заполняю ресурс (в основном POJO), собирая данные из постоянного хранилища. Теперь, прежде чем отправлять ответ, я должен заполнить HREF в ресурсе POJO. Я хочу сделать это в общем виде, чтобы использовать другие сервисы REST (поиск и т. Д.). Я хочу сделать это население HREF в общем месте для целей повторного использования. Вкратце, мой ресурс POJO может проходить через различные слои массива, чтобы изменить свое состояние и, наконец, отправить обратно потребителю.Какой шаблон дизайна подходит здесь?

 

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

Может кто-нибудь помочь мне разобраться в шаблоне дизайна, который может соответствовать моей проблеме.

Я думал о декораторном узоре, но почему-то это не парус моего корабля.

~ Н.

+2

Как насчет цепи повторяемости? – SimY4

+0

Согласно созданию HREFS в качестве ссылки на другие объекты: это должно быть реализовано используемой REST-каркасом. В веб-приложении вы не заботитесь о генерации ссылок ... – Andy

ответ

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(); 
    } 
} 
+0

Спасибо, Дэниэл, за код примера. Я считаю, что эта модель может помочь мне в решении моей проблемы, и я собираюсь с этим. – Niranjan

1

Даже если предыдущие ответы являются хорошими и действительно решают проблему, я хочу предложить вам дополнительный способ, если вы хотите пойти дальше. Связь между объектами очень распространена, поэтому существует множество концепций, и вы можете выбрать тот, который лучше всего подходит для ваших нужд.

Command pattern может помочь вам с капсулой запроса в качестве объекта в

сбора данных из постоянного хранилища

это позволит вам параметризировать клиент очереди или запросы войти ,

Mediator pattern может определять вашу связь между классами Massager 1 --> Massager 2. Делая это, он инкапсулирует взаимодействие ваших объектов. Также он способствует свободному соединению, не позволяя объектам ссылаться друг на друга явно, и это позволит вам самостоятельно изменять свое взаимодействие.

Если вы будете иметь дело с тем, как предупредить изменения в Massager 1 --> Massager 2 классов

мой ресурс POJO может пройти через различные слои массирующими иметь разное состояние изменилось

чем Observer pattern можно определить зависимость между вашими объектами, чтобы при изменении состояния одного объекта все его иждивенцы были уведомлены и обновлены автоматически.

+0

Большое спасибо; это очень приятные идеи, и мы уже внедрили довольно много шаблонов в нашем приложении. Для моей проблемы, как и другие, я собираюсь с шаблоном Chain of Responsibility. – Niranjan

Смежные вопросы