Статьи

Поведенческие образцы дизайна: посредник

Ранее мы рассмотрели шаблон итератора .

Шаблон посредника сильно отличается от того, чего он пытается достичь. Это один из поведенческих паттернов, и его цель — изменить способ взаимодействия объектов друг с другом. Вместо объектов, взаимодействующих друг с другом напрямую, посредник будет обрабатывать взаимодействие объектов.

Например, представьте сценарий финансового обмена. Вы хотите торговать и покупать, но не покупаете непосредственно у того, кто делает предложение. Вместо этого биржа находится в середине, чтобы вы могли совершить сделку.

Люди хотели бы продавать и покупать. Этому способствует обмен. Вы получили объект заказа.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
package com.gkatzioura.design.behavioural.mediator;
 
public class Order {
 
    private String stock;
    private Integer quantity;
    private Double price;
 
    public String getStock() {
        return stock;
    }
 
    public void setStock(String stock) {
        this.stock = stock;
    }
 
    public Integer getQuantity() {
        return quantity;
    }
 
    public void setQuantity(Integer quantity) {
        this.quantity = quantity;
    }
 
    public Double getPrice() {
        return price;
    }
 
    public void setPrice(Double price) {
        this.price = price;
    }
 
}

Следующим объектом будет финансовый объект, который продает акции.

01
02
03
04
05
06
07
08
09
10
11
12
13
package com.gkatzioura.design.behavioural.mediator;
 
public class FinancialEntity {
 
    public boolean sell(Order order) {
 
        /**
         * Supposing the sale was successful return true
         */
        return true;
    }
 
}

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

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
package com.gkatzioura.design.behavioural.mediator;
 
public class Exchange {
 
    private FinancialEntity financialEntity;
 
    public Exchange(FinancialEntity financialEntity) {
        this.financialEntity = financialEntity;
    }
 
    public void serve(Order order) {
 
        /**
         * Choose the financial entity suitable for the order
         */
        financialEntity.sell(order);
    }
 
}

И последний шаг — создание объекта трейдера.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
package com.gkatzioura.design.behavioural.mediator;
 
public class Trader {
 
    private Exchange exchange;
 
    public Trader(Exchange exchange) {
        this.exchange = exchange;
    }
 
    public void buy(String stock,Integer quantity,Double price) {
        Order order = new Order();
        order.setStock(stock);
        order.setQuantity(quantity);
        order.setPrice(price);
        exchange.serve(order);
    }
 
}

Как вы можете видеть, объект трейдера не взаимодействует напрямую с финансовой организацией, предоставляющей акции.

Давайте соединим их всех в главном классе.

01
02
03
04
05
06
07
08
09
10
11
12
package com.gkatzioura.design.behavioural.mediator;
 
public class Mediator {
 
    public static void main(String[] args) {
 
        final FinancialEntity financialEntity = new FinancialEntity();
        final Exchange exchange = new Exchange(financialEntity);
        Trader trader = new Trader(exchange);
        trader.buy("stock_a",2,32.2d);
    }
}

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

Опубликовано на Java Code Geeks с разрешения Эммануила Гкациоураса, партнера нашей программы JCG. Смотрите оригинальную статью здесь: Поведенческие шаблоны дизайна: посредник

Мнения, высказанные участниками Java Code Geeks, являются их собственными.