Ранее мы рассмотрели шаблон итератора .
Шаблон посредника сильно отличается от того, чего он пытается достичь. Это один из поведенческих паттернов, и его цель — изменить способ взаимодействия объектов друг с другом. Вместо объектов, взаимодействующих друг с другом напрямую, посредник будет обрабатывать взаимодействие объектов.
Например, представьте сценарий финансового обмена. Вы хотите торговать и покупать, но не покупаете непосредственно у того, кто делает предложение. Вместо этого биржа находится в середине, чтобы вы могли совершить сделку.
Люди хотели бы продавать и покупать. Этому способствует обмен. Вы получили объект заказа.
|
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, являются их собственными. |