Active Object
Author
Albert FloresNávrhový vzor Active Object patří do skupiny návrhových vzorů pro paralelní programování. Odděluje volání metody od vlastního provedení metody. Typickou situací pro jeho použití je, když je třeba z jednoho vlákna (či více vláken) volat metody objektu, který běží v jiném (svém vlastním) vláknu, tedy volat je asynchronně a zároveň zajistit, aby byly provedeny ve správném pořadí a ve správné chvíli - tj. když nastanou podmínky umožňující jejich spuštění.
Použití
Tento návrhový vzor je vhodné použít, když z různých vláken chceme volat metody jednoho objektu tak, aby tyto metody nezdržovaly nebo nezastavovaly běh těchto vláken, a zároveň chceme mít možnost ovlivňovat pořadí, v jakém objekt metody „zpracuje“ a samozřejmě se při tom vyhnout konfliktům jako race condition nebo deadlock.
Struktura
Active Object využívá šesti tříd: Proxy, Scheduler, Activation List, Servant, Method Request a Future.
Proxy
Proxy skrývá a odděluje celou implementaci Active Objectu od zbytku programu - vláken-klientů, které volají metody poskytované Active Objectem. Po zavolání metody klientem skrze Proxy tato vytvoří Method Request (požadavek na metodu), který představuje v zásadě použití návrhového vzoru Příkaz (Command), a zavolá příslušnou metodu objektu Scheduler pro zařazení požadavku do aktivačního seznamu (Activation List).
Method Request
Třída Method Request je abstraktní třída, pro každou konkrétní poskytovanou metodu je vytvořen potomek této třídy. Scheduler ukládá požadavky do aktivačního seznamu a zjišťuje, která metoda z aktivačního seznamu může být zrovna spuštěna - tj. +more splňuje požadavky, které jsou součástí Method Requestu. Požadavky pak spouští pomocí objektu Servant, který v sobě skrývá implementaci jednotlivých metod.
Important
Vracení výsledku
Pokud metoda má vrátit nějaký výsledek, vrací Proxy objekt Future, do kterého je později, po vykonání příslušné metody, tento výsledek uložen.
Příklad z reálného života
Analogií z reálného života může být práce číšníka a kuchaře v restauraci: číšníka si můžeme představit jako Proxy - sbírá požadavky od klientů - hostů a předává je kuchaři, vytváří z požadavků seznam - Activation List. Kuchař pak požadavky zpracovává v takovém pořadí, aby optimálně využil své zdroje (plotny, pánve, hrnce atd. +more).
Literatura
Douglas C. Schmidt, Michael Stal, Hans Rohnert, Frank Buschmann "Pattern-Oriented Software Architecture, Volume 2, Patterns for Concurrent and Networked Objects", Wiley, 2000