Programování

Implementace návrhového vzoru Observer v C #

Návrhový vzor Observer spadá do kategorie Behavioral designový vzor a používá se, pokud chcete oznámit změnu několika třídám. Behaviorální návrhové vzory jsou ty, které se používají k řešení spolupráce na objektech a delegování odpovědnosti.

V zásadě se návrhový vzor Observer používá k definování toho, jak komunikace mezi komponentami v aplikaci vzájemně působí nebo se navzájem upozorňují zasíláním zpráv. V tomto vzoru subjekt udržuje seznam pozorovatelů a poté upozorní tyto pozorovatele nebo závislé osoby, jakmile dojde ke změně stavu. Můžete také přidat nebo odebrat pozorovatele za běhu.

Použitelnost

Kdy byste měli použít tento návrhový vzor? Je to dobrá volba, pokud chcete mít předmět, který musí pozorovat jeden nebo více pozorovatelů. Jedná se o populární návrhový vzor, ​​který vám pomůže implementovat scénář vydavatel / odběratel, ve kterém lze změny stavu objektu oznámit všem závislým objektům nebo odběratelům (v typické implementaci scénáře vydavatel / odběratel). V návrhovém vzoru Observer jsou změny stavu objektu sděleny jinému objektu bez nutnosti těsného propojení objektů.

Architektonický vzor MVC (Model View Component) je klasickým příkladem implementace návrhového vzoru Observer. Architektonický vzor MVC se používá k vytváření aplikací, které jsou volně spojené, snadněji se testují a udržují. V typické implementaci MVC jsou View a Model od sebe odděleny. Zatímco Pohled představuje Observer, Model představuje váš pozorovatelný objekt.

Implementace návrhového vzoru Observer

Těch konceptů už máme dost - pojďme nyní pochopit tento návrhový vzor s implementací. Nejprve musíme znát zúčastněné třídy nebo typy.

  • Předmět: Představuje to typ, který se používá k definování rozhraní pro připojení nebo odpojení jednoho nebo více pozorovatelů
  • Předmět betonu: Slouží k upozornění pozorovatelů, když dojde ke změně stavu
  • Pozorovatel: To představuje typ, který by měl být upozorněn v případě změny
  • ConcreteObserver: To představuje konkrétní implementaci typu pozorovatele

V typické implementaci návrhového vzoru Observer možná budete chtít mít Subject předmět a Observer typ. Toto je fragment kódu, který to ilustruje.

veřejná abstraktní třída Předmět

    {

chráněný seznam lstObservers = nový List ();

chráněný neplatný registr (Observer observer)

        {

lstObservers.Add (pozorovatel);

        }

Protected Void UnRegister (Observer Observer)

        {

lstObservers.Remove (pozorovatel);

        }

Protected Void UnRegisterAll ()

        {

foreach (Pozorovatel pozorovatel v lstObservers)

            {

lstObservers.Remove (pozorovatel);

            }

        }

public abstract void Notify ();

    }

veřejný abstraktní pozorovatel

    {

public abstract void Update ();

    }

Nyní se podívejte na fragment kódu uvedený výše. Třída Předmět obsahuje seznam instancí Observer a několik metod k přidání nebo odebrání odběratelů, tj. Instancí třídy Observer. Všimněte si, že metoda Notify byla deklarována abstraktně - třída, která by rozšířila třídu Subject, musí pro tuto metodu poskytnout příslušnou implementaci. Třída Observer obsahuje pouze jednu metodu - metodu Update. Tuto implementaci jsem učinil co nejjednodušší.

Třída BlogPost rozšiřuje třídu Subject a implementuje metodu Notify, která byla ve třídě Subject deklarována jako abstraktní.

public class BlogPost: Předmět

    {

public void Attach (Observer observer)

        {

// Zde můžete napsat vlastní implementaci nebo zavolat základní verzi

base.Register (pozorovatel);

        }

public void Detach (Observer observer)

        {

// Zde můžete napsat vlastní implementaci nebo zavolat základní verzi

base.UnRegister (pozorovatel);

        }

public void DetachAll ()

        {

// Zde můžete napsat vlastní implementaci nebo zavolat základní verzi

base.UnRegisterAll ();

        }

public override void Notify ()

        {

foreach (Pozorovatel pozorovatel v lstObservers)

            {

observer.Update ();

            }

        }

    }

Níže je uvedena třída ConcreteObserver. Nechávám na čtenářích, aby v metodě Update napsali svůj vlastní kód a poslali e-mail s oznámením, že byl článek zveřejněn, atd.

veřejná třída ConcreteObserver: Observer

    {

veřejný řetězec Email

        {

dostat; soubor;

        }

public override void Update ()

        {

Console.WriteLine ("Uvnitř metody aktualizace ...");

        }

    }

Další informace o návrhovém vzoru Observer se dozvíte z tohoto odkazu.

$config[zx-auto] not found$config[zx-overlay] not found