本著菜鳥先飛的想法,決定把平時遇到的知識點記錄下來,一來是加深理解,二來是方便以後自己查閱。當您看到我這篇文章的時候,覺得代碼有哪裡不足的地方,請多指教,謝謝。(命名不規范是為了加深自己的理解,多多見諒。)
觀察者模式:即當目標對象狀態或者是行為發生改變時,正在觀察該目標對象的觀察者們做出一系列自動反應。
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("人醒了......");
}
}
第一次發帖感覺好亂,多多包含。—菜鳥先飛