Stáhnout prezentaci
Prezentace se nahrává, počkejte prosím
ZveřejnilZbyněk Tichý
1
Mediator
2
Mediator - motivace FontDialog závislosti mezi jednotlivými ovládacími prvky jsou netriviální
3
Mediator - motivace „Naivní“ přístup každá komponenta obdrží ukazatele na „kolegy“, se kterými komunikuje chování je rozprostřeno mezi jednotlivými komponentami anEntryField listbox styleEntryField listbox styleListBox entryField preview aListBox entryField preview styleBox previewField
4
Řešení pomocí Mediatoru každá komponenta obsahuje pouze ukazatel na jeden objekt - mediátor v něm je soustředěno chování celého dialogového okna Mediator - motivace má přehled o jednotlivých widgetech, koordinuje interakce anEntryField director styleEntryField director styleListBox director aListBox director previewField director aFontDialogDirector
5
uživatel po zobrazení dialogu změní výběr listboxu po ohlášení změny mediátor zjistí aktuální položku a předá jí do vstupního políčka Listbox a entry field o sobě vůbec neví o tom, že se má po změně někam něco vyplnit, se rozhoduje v mediátoru Interakce zprostředkovaně přes jeden objekt jednodušší změna chování Mediator - chování čas
6
Struktura Mediator - struktura rozhraní pro komunikaci kolegů znají pouze svého mediátora veškerou komunikaci směřují na něj implementuje společné chování, zná a koordinuje kolegy
7
Mediator - účel Účel zapouzdření chování systému objektů ruší přímou vazbu mezi komponentami v rámci systému (Loose coupling) umožňuje měnit interakci objektů nezávisle na jejich vnitřní implementaci zjednodušuje program Není to proti principům OOP? distribuce chování mezi jednotlivými objekty je přece většinou vítaná ale jen do té doby, dokud nejde proti znovupoužitelnosti slévání do monolitu
8
Mediator - použití Kdy sáhnout po mediátoru? skupina objektů má komunikovat definovaným, ale složitým způsobem závislosti mezi objekty jsou složitě strukturované nebo těžko pochopitelné znovupoužití objektu je obtížné, jelikož spolupracuje s mnoha jinými objekty chování distribuované mezi mnoho objektů bylo mělo být upravitelné bez nutnosti vytváření mnoha podtříd
9
Mediator - důsledky Výhody a omezení omezuje odvozování mnoha podtříd původně distribuované chování soustřeďuje na jedno místo ostatní objekty je možné použít bez nutnosti úprav ruší vazby 1:1 mezi jednotlivými kolegy kolegové o sobě navzájem nevědí každý může být použitý sám o sobě zjednodušuje ‚protokol‘ n:m interakce nahrazuje 1:m, které jsou jednodušší k pochopení i rozšiřování zabstraktňuje způsob spolupráce objektů odděluje kooperaci mezi objekty od jejich samostatného chování kooperace lze řešit na jednom místě centralizuje řízení samotný mediátor bude většinou složitý
10
Mediator - implementace Implementace varianty abstraktní mediátor přímo 1 konkrétní mediátor komunikace kolega-mediátor při ‚zajímavé‘ události aktivně, když kolega něco potřebuje mediátor propaguje událost k dalším kolegům implementace komunikace speciální notifikační interface mediátora pomocí patternu Observer kolegové vystupují jako subjekty, kdykoliv změní stav, upozorní observera-mediátora rozumná extrakce funkcionality - pozor na „boží“ objekty na mediátora není dobré převádět vše
11
Mediator - implementace public abstract class StockExchangeSystem { public void tellIntention(type, item, quantity, trader) { partner = findPossiblePartner(type, item, quantity, trader); if (partner.interestedIn(type, item, quantity)) { processTransaction() } public abstract int getExpectedPrice(item); … protected abstract Trader findPossiblePartner(type, item, quantity, trader); } Rozhraní kolega → mediátor public abstract class Trader { protected StockExchangeSystem exchange; public Trader(StockExchangeSystem exchange) { this.exchange = exchange; } protected abstract boolean interestedIn(type, item, quantity); } Abstraktní třídy Rozhraní mediátor → kolega
12
Mediator - implementace Konkrétní chování v potomcích public class PersistentStockExchangeSystem extends StockExchangeSystem { protected Trader findPossiblePartner(type, item, quantity, trader) { // Prohledej databazi a zjisti partnera } public int getExpectedPrice(item) { // Vrat z databaze cenu itemu } public class GreedyCornTrader extends Trader { public GreedyCornTrader(StockExchangeSystem exchange) { super(exchange); } protected boolean interestedIn(type, item, quantity) { // Rozhodneme se, zda výzvu přijmeme } public void doSomeTrade() { // Notifikovat SES o tom, co chceme delat… exchange.tellIntention(…, this); // … }
13
Mediator – použití Možná použití – počítačový svět GUI IM - chatovací server konkrétní mediátor – chatovací room kolegové – jednotliví lidé (resp. jejich klienti) dům budoucnosti – ‚smart home‘ vše řízeno počítačem - mediátor mnoho různorodých zařízení lednice, která ví, co koupit klimatizace, topení, různá teplotní či vlhkostní čidla alarm, zamykání dveří,...... potřeba koordinace když spustí alarm, zavolá se policie, pošle se sms majiteli dojde-li mléko, je potřeba ho objednat v e-shopu paralelní a distribuované výpočty synchronizace, mezivýsledky obchodování na burze řízení letového provozu
14
Mediator – související NV Související NV Facade fasáda jen abstrahuje skupinu objektů do jednoho rozhraní vnitřní objekty o ní neví na žádné vrstvě není složitá komunikace pouze jednosměrná komunikace žádná přidaná funkcionalita Observer soupeř možná alternativa v případě jednodušší komunikace doplněk kolegové mohou komunikovat s mediátorem pomocí Observera (vystupují v něm jako subjekty)
15
Otázky?
Podobné prezentace
© 2024 SlidePlayer.cz Inc.
All rights reserved.