观察者模式

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace observerModel
{
	interface Subject
	{
		void Attach(Observer observer);
		void Detach(Observer observer);
		void Notice();
		string Action
		{
			get;
			set;
		}
	}
	class Boss:Subject
	{
		public List<Observer> observers = new List<Observer>();
		private string action;
		public void Attach(Observer observer)
		{
			observers.Add(observer);
		}
		public void Detach(Observer observer)
		{
			observers.Remove(observer);
		}
		public void Notice()
		{
			foreach (Observer observer in observers)
			{
				observer.Update();
			}
		}
		public string Action
		{
			get { return action; }
			set { action = value; }
		}
		
	}
	class Secretary : Subject
	{
		public List<Observer> observers = new List<Observer>();
		private string action;
		public void Attach(Observer observer)
		{
			observers.Add(observer);
		}
		public void Detach(Observer observer)
		{
			observers.Remove(observer);
		}
		public void Notice()
		{
			foreach (Observer observer in observers)
			{
				observer.Update();
			}
		}
		public string Action
		{
			get { return action; }
			set { action = value; }
		}
	}
	abstract class Observer
	{
		public string name;
		public Subject subject;
		public Observer(string name, Subject subject)
		{
			this.name = name;
			this.subject = subject;
		}
		public abstract void Update();
	}
	class Player:Observer
	{
		public Player(string name,Subject subject) : base (name,subject)
		{
		
		}
		public override void Update()
		{
			Console.WriteLine("{0},{1} need to close game", subject.Action, name);
		}
	}
	class StockObserver : Observer
	{
		public StockObserver(string name, Subject subject)
			: base(name, subject)
		{

		}
		public override void Update()
		{
			Console.WriteLine("{0},{1} need to close stock", subject.Action, name);
		}
	}
	class Program
	{
		static void Main(string[] args)
		{
			Boss laoda = new Boss();
			Player p1 = new Player("huguo", laoda);
			StockObserver s1 = new StockObserver("aa", laoda);

			laoda.Attach(p1);
			laoda.Attach(s1);

			laoda.Action = "The boss Enters into office";

			laoda.Notice();
			Console.WriteLine("------------------------------------");
			Secretary Lili = new Secretary();

			Player p2 = new Player("cc", Lili);
			Lili.Attach(p2);

			Lili.Action = "The leader review the work";
			Lili.Notice();
		}
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值