概要
定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时, 所有依赖于它的对象都得到通知并被自动更新。
类图
运行效果
代码
using System;
using System.Collections.Generic;
namespace 观察者模式
{
enum State { sort,run}
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
Program p = new Program();
p.main();
Console.ReadLine();
}
void main()
{
ISubject subject = new CommandCenter();
for(int i = 0; i < 10; i++)
{
subject.attach(new Tank());
}
subject.setDate(State.sort);
subject.setDate(State.run);
}
}
//------------------
interface ISubject
{
void attach(Observer observer);
void notify();
void setDate(State state);
}
interface Observer
{
void update(State state);
void sort();
void run();
}
//--------------------------
class CommandCenter : ISubject
{
List<Observer> observers = new List<Observer>();
State state = State.sort;
public CommandCenter()
{
}
public void attach(Observer observer)
{
observers.Add(observer);
}
public void notify()
{
foreach(Observer observer in observers)
{
observer.update(this.state);
}
}
public void setDate(State state)
{
this.state = state;
notify();
}
}
class Tank : Observer
{
static int index = 0;
public int id;
public Tank()
{
id = index++;
}
public void run()
{
Console.WriteLine($"id:{id} run");
}
public void sort()
{
Console.WriteLine($"id:{id} sout");
}
public void update(State state)
{
if(state== State.sort)
{
sort();
}
else
{
run();
}
}
}
}