4IT115NPrepinaniBarevObserver.pptx
- Количество слайдов: 12
Kurz 4 IT 115 od ZS 2015 3. cvičení Další komponenty Gui Návrhový vzor Observer Alena Buchalcevová katedra informačních technologií Vysoká škola ekonomická v Praze buchalc@vse. cz
Projekt Prepinani. Barev. FX_List 2 Kurz 4 IT 115 cvičení ©Alena Buchalcevová
Diskuse k řešení § § Na volbě Radio. Buttonu závisí § změna barvy pozadí v panelu dolu § změna seznamu barev Mohli bychom chtít přidat ještě další závislé objekty V tomto řešení jsou objekty přímo uvedeny v ovladači – těsná vazba Musíme také přesně vědět, co dělat – jednou voláme set. Style, podruhé metodu add cervena. Radio. B. set. On. Action(new Event. Handler
Návrhový vzor Observer Problém: Na stavu jednoho objektu závisí jiné objekty. Jakmile se změní stav tohoto objektu, všechny na něm závislé je třeba informovat § Objekty by měly být volně vázané – to znamená, že objekt, který změní svůj stav a bude o tom informovat ostatní, by neměl být závislý na jejich vnitřním uspořádání. § Objekty, které budou přijímat informace o změně stavu, nemusí být předem známy. Řešení: Objekt, který mění svůj stav, subjekt posílá informaci těm, kteří se u něj zaregistrovali jako pozorovatelé – observer. Každý pozorovatel musí mít definovánu speciální metodu update, kterou subjekt volá. 4 Kurz 4 IT 115 cvičení ©Alena Buchalcevová
Návrhový vzor Observer 5 Kurz 4 IT 115 cvičení ©Alena Buchalcevová
Projekt Prepinani. Barev. FX_Observer /1 6 Kurz 4 IT 115 cvičení ©Alena Buchalcevová
Projekt Prepinani. Barev. FX_Observer /2 Výsledek programu s použitým observerem 7 Kurz 4 IT 115 cvičení ©Alena Buchalcevová
Projekt Prepinani. Barev. FX_Observer /3 § v balíčku util jsou deklarována dvě rozhraní public interface Subjekt. Zmeny. Barvy { public void register. Observer(Observer. Pro. Barvy kdo. Se. Registruje); public void remove. Observer(Observer. Pro. Barvy kdo. Rusi. Registraci); public void notify. Observers(); public String get. Aktualni. Barva(); public String get. Aktualni. Style(); } public interface Observer. Pro. Barvy { public void update(); } 8 Kurz 4 IT 115 cvičení ©Alena Buchalcevová
Projekt Prepinani. Barev. FX_Observer /4 třída Seznam. Barev – je observerem 9 public class Seznam. Barev implements Observer. Pro. Barvy{ private List. View
Projekt Prepinani. Barev. FX_Observer /5 třída Dolni. Panel – je observerem public class Dolni. Panel implements Observer. Pro. Barvy{ private Flow. Pane dolni. Flow. Pane; private Subjekt. Zmeny. Barvy subjekt; public Dolni. Panel(Subjekt. Zmeny. Barvy subjekt) { this. subjekt = subjekt; subjekt. register. Observer(this); init(); } private void init() { dolni. Flow. Pane = new Flow. Pane(); dolni. Flow. Pane. set. Pref. Height(100); update(); } public Flow. Pane get. Dolni. Panel() { return dolni. Flow. Pane; } 10 @Override public void update() { dolni. Flow. Pane. set. Style(subjekt. get. Aktualni. Style()); } Musí se zaregistrovat k subjektu Nastaví barvu pozadí } Kurz 4 IT 115 cvičení ©Alena Buchalcevová
Projekt Prepinani. Barev. FX_Observer /6 třída Prepinani. Barev. FX – je subjektem public class Prepinani. Barev. FX extends Application implements Subjekt. Zmeny. Barvy { private List
Projekt Prepinani. Barev. FX_Observer /7 třída Prepinani. Barev. FX public void register. Observer(Observer. Pro. Barvy kdo. Se. Registruje) { seznam. Observeru. add(kdo. Se. Registruje); } public void remove. Observer(Observer. Pro. Barvy kdo. Rusi. Registraci) { seznam. Observeru. remove(kdo. Rusi. Registraci); } public void notify. Observers() { for(Observer. Pro. Barvy obs: seznam. Observeru){ obs. update(); } } public String get. Aktualni. Barva() { return aktualni. Barva; } public String get. Aktualni. Style() { return aktualni. Style; } 12 Kurz 4 IT 115 cvičení ©Alena Buchalcevová