標籤:blog ar io os sp for on 資料 2014
觀察者模式(observer行為型)c#簡單例子
幾個要點:模式使目標與觀察都之間的依賴關係達到松耦合、通知會自動傳播
例子:玩家擊中敵人後發生一系列變化:發後爆炸、敵人少1個....
namespace adapterpattern{ public partial class ObserverForm : Form { public ObserverForm() { InitializeComponent(); } private void btnDisplay_Click(object sender, EventArgs e) { BaseData.EnemyNumber = 100; IObserver explosionEvent = new ExplosionEvent(); IObserver enemy = new Enemy(); player p1 = new player1(); p1.AddObserver(explosionEvent); p1.AddObserver(enemy); p1.Notify(); listBox1.Items.Add(p1.Display()); } } public static class BaseData//資料中轉站 { public static string DisplayString { get; set; } public static int EnemyNumber { get; set; } } public abstract class player { List<IObserver> observers = new List<IObserver>();//觀察員列表 public virtual void Notify() { foreach (IObserver observer in observers) { observer.Update();//遂個通知觀察員 } } public virtual void AddObserver(IObserver observer)//增加觀察員 { observers.Add(observer); } public virtual void Delet(IObserver observer)//刪除觀察員 { observers.Remove(observer); } public abstract string Display(); } public class player1 : player { public override string Display() { return BaseData.DisplayString + BaseData.EnemyNumber.ToString(); } } public interface IObserver//觀察員介面 { void Update(); } public class ExplosionEvent : IObserver //觀察員1 { public void Update() { BaseData.DisplayString = "顯示爆炸"; } } public class Enemy : IObserver //觀察員2 { public void Update() { BaseData.EnemyNumber -= 1; //"敵人數減少1個"; } }}
觀察者模式(observer行為型)c#簡單例子