Implementierung des Pattern "Observer"

the_lorn

Mitglied
Hallo Leute!
Ich habe ein Problem bei der Implemenierung des Observers (Beobacher);

Ich habe eine Klasse "File" die alle Atribute einer eingelesenen Datei beinhaltet.
Da ich die Atribute bereits anzeigen will bevor die ganze Datei eingelesen ist muss sich das Fenster (Startfenster) stets
erneuern wenn wieder etwas neues hinzukommt. Daher der Observer!

Miene Impl.:

Code:
public interface Observable  	
{  		void addObserver(Observer o); 
   		void removeObserver(Observer o);  
  		void Notify();  	
}      

public interface Observer  
{
	void update(Observable oa);
}     

public class File:Observable
{
  		
           private ArrayList observList=new ArrayList();
          ...verschiedene Methoden für speicherung der Atribute    
		
                  public void addObserver(Observer o)
  		{ 
 			Console.WriteLine("in addObserver"); 
 			observList.Add(o); 
 		}
  		public void removeObserver(Observer o)
  		{
  			observList.Remove(o);
  		}
  		public void Notify()
  		{ 
 			Console.WriteLine("in Notify");
              		foreach (Observer o in observList)
  			{ 
 				o.update(this); 
 			}  


public class StartFenster:Form,Observer
{ 
   		public StartFenster() 
 		{ 
 			....  wie meld ich jetzt das Fenster beim Observable an?
  		}
  		public void update(Observable o){....}

Die Frage ist nun, wie meld ich das Fenster beim Observable (File) an?
Beim Startfenster müßte ich ja eigentlich nur "addObserver(this);" eingeben oder? Aber das geht scheinbar nicht. Die update-Methode in Startfenster wird bei mir nie aufgerufen obwohl ich Notify() ausführe. Kann mir jemand helfen? Ich hab schon im Netz nach Observer gesucht aber dort fand ich nur Klassendiagramme die zwar logisch sind aber mir nicht klar machen wie ich den Observer nun implementiere. Vielleicht hat einer von euch auch ein Codebeispiel irgendwo rumzuliegen. Das hilft bestimmt auch schon.
 
Um ganz ehrlich zu sein, kenn ich mich mit C# nicht so gut aus. FileInfo nützt mir nach meiner Meinung nichts. Von der anderen hab ich noch nichts gehört.
Daher dachte ich mir, ich mach alles selber. Macht ja Quelltextmäßig auch nicht so viel mehr Arbeit. Der Rest meines Programms arbeitet ja schon. Ich muss jetzt nur noch dafür sorgen, dass meine Fenster stets erneuert werden wenn in meiner File-Klasse neue Informationen hinzukommen.
Um vielleicht das Problem besser zu verstehen: Ich lese mit dem Prog mpeg2-Header-Daten aus. Diese sind in meiner eigenen Klasse "File" (ist also keine C# klasse) gespeichert. Die Fenster sollen jetzt also nur noch anzeigen was ich auslese.
 
Zurück