Obsah:
- Vytvoření rozhraní objektu
- Vytvoření rozhraní pro pozorovatele
- Subjekt musí nechat pozorovatele registrovat a musí je upozornit, když nastane událost. Podle rozhraní rozhraní Téma, které má subjekt implementovat v těchto příkladech, jsou: registerObserver, removeObserver a notifyObservers. To je to, co dělá třída databáze v tomto příkladu.
Video: O kosmu, UFO, fyzice a templářských rytířích - NASSIM HARAMEIN (přednáška 1/2) 2024
Vzor vzhledu Observeru umožňuje několik objektů pozorovatele upozornit, když se předmět objektu nějakým způsobem změní. Každý pozorovatel se zaregistruje s předmětem, a když dojde k takové změně, oznamuje předmět všem všem. Každý z pozorovatelů je informován současně (tedy současně).
Vytvoření rozhraní objektu
Při implementaci návrhového vzoru je často dobré začít vytvářením rozhraní, abyste se ujistili, že objekty, které vytvoříte, budou dodržovat vzor, který se pokoušíte použít - zejména pokud jsou zahrnuty více objektů. Implementace tohoto rozhraní - naprogramování na rozhraní, jak se nazývá - udržuje váš kód v souladu a obvykle udržuje věci jasnější.
Když umístíte vzhled Observeru do kódu, nastavte pro pozorovatele pozorovací rozhraní nebo abstraktní třídu; Obvykle budete mít více pozorovatelů a musíte dodržovat metody, které implementují, konzistentní.
V tomto příkladu je také třeba nastavit rozhraní pro předmět, což pozorovatelé pozorují; v rozhraní Předmět jsou uvedeny metody, které musí subjekty implementovat. Zde vložte metodu registerSbserver tak, aby subjekt mohl sledovat pozorovatele, kteří chtějí být registrováni. Kromě registrace pozorovatelů byste měli mít nějaký způsob, jak se je zbavit, a tak přidat metodu removeObserver. A existuje metoda notifyObservers, která upozorní pozorovatele na nějakou změnu.
public interface Předmět
{
public void registerObserver (Observer o);
public void removeObserver (Observer o);
public void notifyObservers ();
}
Toto rozhraní obsahuje seznam metod, které mají implementovat databázový systém. Další krok: rozhraní pro pozorovatele.
Vytvoření rozhraní pro pozorovatele
Vytváření rozhraní Observer, které provádějí pozorovatelé a umožňuje jim dostávat oznámení, je jednoduché. Vše, co potřebujete, je metoda, která bude volána, když bude připraveno nové oznámení (můžete tuto metodu nazvat). V tomto příkladu předáte operaci databáze, která byla provedena (například "edit", "delete", "create" a tak dále) a záznam, který byl změněn jako řetězec metodě aktualizace.
Pozorovatel veřejného rozhraní
{ public void update (operace řetězce, záznam řetězce);
}
Když pozorovatelé implementují metodu aktualizace, subjekt je schopen předat záznam, který byl ovlivněn, a operaci, která byla provedena.
Dobře, máte dobré jít. Je čas vytvořit databázi, která bude sledovat pozorovatele a upozorní je na změnu.
Vytvoření objektu
Subjekt musí nechat pozorovatele registrovat a musí je upozornit, když nastane událost. Podle rozhraní rozhraní Téma, které má subjekt implementovat v těchto příkladech, jsou: registerObserver, removeObserver a notifyObservers. To je to, co dělá třída databáze v tomto příkladu.
Chcete-li sledovat pozorovatele, použijte vektor Java nazvaný pozorovatelé, vytvořený v konstruktoru databáze. (Specifikátor typu zde, je pro Java 1. 5 nebo novější a označuje, že každý objekt pozorovatele implementuje rozhraní Observeru, pokud používáte starší verzi Java, vynechejte specifikátor typu.)
import java. util. *;
veřejná třída Databáze implementuje předmět
{
soukromé Vektorové pozorovatele;
veřejná databáze ()
{
observers = new Vector ();
}
.
.
.
}
Při použití vektoru je sledování pozorovatelů jednoduché. Když chce pozorovatel zaregistrovat, volá metodu registru objektu Observer a předává se jako objekt. Předmět - objekt naší třídy Databáze - prostě přidá pozorovatele k vektoru pozorovatelů v metodě registerObserver pomocí metody přidání třídy Vector.
import java. util. *;
veřejná třída Databáze implementuje předmět
{
soukromé Vektorové pozorovatele;
veřejná databáze ()
{
observers = new Vector ();
}
public void registerObserver (pozorovatel o)
{
pozorovatelé. přidat (o);
}
.
.
.
}
Jak odstranit pozorovatele z pozorovatele? Žádný problém. Pokud chcete odstranit objekt z vektoru, můžete použít metodu odstranění vektoru; zde je, jak to funguje v metodě removeObserver třídy Třída databáze:
import java. util. *;
veřejná třída Databáze implementuje předmět
{
soukromé Vektorové pozorovatele;
veřejná databáze ()
{
observers = new Vector ();
}
public void registerObserver (pozorovatel o)
{
pozorovatelé. přidat (o);
}
public void removeObserver (pozorovatel o)
{
pozorovatelé. odstranit (o);
}
.
.
.
}
Když uživatel skutečně něco dělá s databází - například odstraní záznam - volá metodu editRecord třídy Třídy databáze. Chcete-li například odstranit záznam 1, můžete tuto metodu nazvat takto:
databáze. editRecord ("smazat", "záznam 1");
Jak vypadá metoda editRecord: Když je tato metoda volána, předáte ji operaci databáze, kterou chcete provést, a záznam, na kterém chcete pracovat, a to jak jako řetězec v tomto příkladu. Tyto řetězce jsou uloženy tak, aby mohly být předány pozorovatelům. Po uložení řetězců je volána metoda notifyObservers, která přichází dále, aby upozornila všechny pozorovatele.
import java. util. *;
veřejná třída Databáze implementuje předmět
{
soukromé Vektorové pozorovatele;
soukromá operace řetězce;
soukromý záznam řetězce;
veřejná databáze ()
{
observers = new Vector ();
}
.
.
.
public void editRecord (operace řetězce, záznam řetězce)
{
toto.provoz = provoz;
tohle. záznam = záznam;
notifyObservers ();
}
}
Zde je maso kódu, část, která oznamuje každému pozorovateli, že došlo ke změně: metoda notifyObservers. Každý pozorovatel implementuje toto příkladové rozhraní Observer - což znamená, že má aktualizační metodu - tak notifyObservers jen musí smyčku nad všemi registrovanými pozorovateli ve vektoru pozorovatelů a volat každou metodu aktualizace s databázovou operací a postiženým záznamem.
import java. util. *;
veřejná třída Databáze implementuje předmět
{
soukromé Vektorové pozorovatele;
soukromá operace řetězce;
soukromý záznam řetězce;
.
.
.
public void notifyObservers ()
{ pro (int loopIndex = 0; loopIndex pozorovatel. aktualizace (provoz, záznam); } } public void editRecord (operace řetězce, záznam řetězce) { toto. provoz = provoz; tohle. záznam = záznam; notifyObservers (); } } To je vše, co potřebujete pro databázi. java, což je předmět v tomto příkladu. Předmět umožní, aby se pozorovatelé zaregistrovali, zrušili registraci a dostali oznámení, když byl databázový záznam upraven (což děláte s metodou editRecord třídy Třídy databáze). Všechno, co zbývá udělat, aby jste se dostali na cestu, je vytvořit pozorovatele sami.