本著菜鳥先飛的想法,決定把平時遇到的知識點記錄下來,一來是加深理解,二來是方便以後自己查閱。當您看到我這篇文章的時候,覺得代碼有哪裡不足的地方,請多指教,謝謝。(命名不規范是為了加深自己的理解,多多見諒。)
觀察者模式:即當目標對象狀態或者是行為發生改變時,正在觀察該目標對象的觀察者們做出一系列自動反應。
1.接口實現 public interface Oberver { void 坐出反應(); } public interface BObserver { void 反應(Oberver o); } public class 老鼠 : Oberver { public 老鼠(BObserver b) { b.反應(this); } public void 坐出反應() { Console.WriteLine("老鼠跑了..."); } } public class 人 : Oberver { public 人(BObserver b) { b.反應(this); } public void 坐出反應() { Console.WriteLine("人醒了..."); } } public class 貓 : BObserver { List<Oberver> list; public 貓() { list = new List<Oberver>(); } public void 反應(Oberver o) { list.Add(o); } public void 貓叫() { foreach (Oberver o in list) { o.坐出反應(); } } 2.委托和事件 public delegate void 處理(); public abstract class 被觀察 { public event 處理 處理事件; public void Test() { if (處理事件 != null) this.處理事件(); } } public class 貓 : 被觀察 { public void 貓叫() { Console.WriteLine("貓叫了!"); this.Test(); } } public abstract class 觀察者2 { public 觀察者2(被觀察 b) { b.處理事件 += new 處理(觀察做出反應); } public abstract void 觀察做出反應(); } public class 老鼠 : 觀察者2 { public 老鼠(被觀察 b) : base(b) { } public override void 觀察做出反應() { Console.WriteLine("老鼠跑了......"); } } public class 人 : 觀察者2 { public 人(被觀察 b) : base(b) { } public override void 觀察做出反應() { Console.WriteLine("人醒了......"); } }
第一次發帖感覺好亂,多多包含。—菜鳥先飛