Visualizzazione dei risultati da 1 a 10 su 13

Visualizzazione discussione

  1. #1
    Utente di HTML.it L'avatar di ing82
    Registrato dal
    Sep 2014
    Messaggi
    177

    Design Pattern Observer

    Sto sperimentando il design pattern Observer seguendo le indicazioni riportate nel libro Design Patterns di Gamma, Helm, Johnson, Vlissides che qui riporto:

    codice:
    class Subject;
    
    class Observer
    {
      public:
        virtual ~Observer(){};
        virtual void update(Subject*subject)=0;
      protected:
        Observer(){};
    };
    
    class Subject
    {
      public:
        virtual ~Subject(){};
        virtual void attach(Observer*observer);
        virtual void detach(Observer*observer);
        virtual void notify();
      protected:
        Subject(){};
      private:
        std::vector<Observer*>mObserverList;
    };
    Per le classi base quindi niente problemi.

    Mi crea qualche problema / dubbio come implementare le classi derivate, in particolare di Observer.
    In Observer infatti devo tenere il riferimento al / ai Subject che sto osservando.

    Ho provato a fare cosi':



    codice:
    class DerSubject: public Subject {};
    
    class ObserverTester: public Observer
    /*ObeserverTester deve tenere d'occhio un DerSubject, quindi al suo interno, e' meglio fare riferimento a un DerSubject o a un Subject?*/
    {
      public:
        ObserverTester(Subject* subject)//o DerSubject?
        {
          mSubject=subject;
          mSubject->attach(this);
        }; 
        void update(Subject* subject) override//qui resta cosi' per forza...
        {
          if(subject==mSubject)
          {
            std::cout<<"\nHello from observer "<<this;
            std::cout<<"\nI'm observing subject "<<mSubject;
          }
        };
      private:
        Subject* mSubject;//o DerSubject?
    };
    Il dubbio principale e' se nelle classi derivate da Observer tengo come riferimento un dato membro di tipo Subject o DerSubject, cioe' quello che sara' il reale tipo di subject osservato: credo la seconda, anche se nell'esempio di codice sopra postato ho fatto il contrario.

    Inoltre, potrebbe mai essere necessario implementare un metodo setSubject nelle classi derivate da Observer per poter cambiare il Subject osservato?

    Grazie
    Ultima modifica di ing82; 04-12-2016 a 16:49

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.