2014-02-21 113 views
1

請幫助我設計觀察者模式的原型在C#中。 什麼是觀察者模式? 什麼關於觀察者模式的原型? 在C#.net關於觀察者模式的原型

+0

似乎有點模糊... –

回答

1

觀察員

IObserver.cs

namespace ObserverOPC.Observer 

{ 

    public interface IObserver 
    { 
     void Notify(int t1,int t2); 
    } 
} 

Observer1.xaml.cs

using ObserverOPC.Subject; 

namespace ObserverOPC.Observer 

{ 

    public partial class Observer1 : Window,IObserver 
    {  
     public Observer1() 
     { 
      InitializeComponent(); 
     } 

     public void Notify(int _t1, int _t2) 
     { 
     //get value here 
     } 
    } 
    } 

主題

ISubject.cs

namespace ObserverOPC.Subject 

{ 

    public interface ISubject 
    { 
     void Subscribe(Observer.IObserver objObserver); 
     void UnSubscribe(Observer.IObserver objObserver); 
     void NotifySubscribers(); 
    } 
} 

OPCAPI.cs

namespace ObserverOPC.Subject 

{ 

    public interface OPCAPI 
    { 
     void Update(); 

    } 
} 

OPCClient.cs

using ObserverOPC.Observer; 

using OPCAutomation; 

namespace ObserverOPC.Subject 

{ 

    public class OPCClient:OPCAPI,ISubject 

    { 
    private IList<Observer.IObserver> _observers=new List<IObserver>(); 

    public void Update() 
    { 
    } 

    public void Subscribe(IObserver observer) 
    { 
     _observers.Add(observer); 
    } 

    public void UnSubscribe(IObserver observer) 
    { 
     _observers.Remove(observer); 
    } 

    public void NotifySubscribers() 
    {   
     foreach (IObserver s in _observers) 
     { 
      s.Notify(_tag1Value,_tag2Value); 
     } 
    } 
} 
} 

個MainWindow.xaml.cs

using ObserverOPC.Observer; 

using ObserverOPC.Subject; 

namespace ObserverOPC 
{ 

public partial class MainWindow : Window 
{ 

    OPCClient objOpcClient= new OPCClient(); 
    public MainWindow() 
    { 


     IObserver _client1Observer=new Observer1(); 
     IObserver _client2Observer = new Observer2(); 

     //Register the Observers    
     objOpcClient.Subscribe(_client1Observer); 
     objOpcClient.Subscribe(_client2Observer);   
     objOpcClient.Update(); 

     this.Hide(); 
    } 
} 
} 
+0

謝謝你的編輯這麼多 – AndroSco

+0

@ElectricRouge謝謝.. –