Prezentace se nahrává, počkejte prosím

Prezentace se nahrává, počkejte prosím

Mediator. Mediator - motivace  FontDialog  závislosti mezi jednotlivými ovládacími prvky jsou netriviální.

Podobné prezentace


Prezentace na téma: "Mediator. Mediator - motivace  FontDialog  závislosti mezi jednotlivými ovládacími prvky jsou netriviální."— Transkript prezentace:

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?


Stáhnout ppt "Mediator. Mediator - motivace  FontDialog  závislosti mezi jednotlivými ovládacími prvky jsou netriviální."

Podobné prezentace


Reklamy Google