观察者模式

观察者模式(Observer)完美的将观察者和被观察的对象分离开。举个例子,用户界面可以作为一个观察者,业务数据是被观察者,用户界面观察业务数据的变化,发现数据变化后,就显示在界面上。面向对象设计的一个原则是:系统中的每个类将重点放在某一个功能上,而不是其他方面。一个对象只做一件事情,并且将他做好。观察者模式在模块之间划定了清晰的界限,提高了应用程序的可维护性和重用性。

using System;

using System.Collections.Generic;

namespace MyApp

{

class Program

{

static void Main()

{

//There is a thief, a cat and a dog.

Subject thief1 = new Thief("Thief Jia");

Observer cat = new Cat("Maomi");

Observer dog=new Dog("Wangcai");

thief1.AddObserver(cat);

thief1.AddObserver(dog);

//The thief came into the house, and cat and dog ovserved the thief.

thief1.Notisfy();

Console.ReadKey();

}

}

abstract class Subject

{

public string Name { get; set; }

List<Observer> observers = new List<Observer>();

public Subject(string subjectName)

{

Name = subjectName;

}

public void AddObserver(Observer observer)

{

observers.Add(observer);

}

public void DeleteObserver(Observer observer)

{

observers.Remove(observer);

}

public void Notisfy()

{

foreach (Observer observer in observers)

{

observer.Update(this);

}

}

}

interface IObserverAction

{

void Update(Subject subject);

}

abstract class Observer:IObserverAction

{

public string Name { get; set; }

public Observer(string observerName)

{

Name = observerName;

}

public abstract void Update(Subject subject);

}

class Cat:Observer

{

public Cat(string catName)

: base(catName)

{ }

public override void Update(Subject subject)

{

Console.WriteLine("I'm a cat named {0}, and {1} has come into our house, miao!", Name, subject.Name);

}

}

class Dog : Observer

{

public Dog(string dogName)

: base(dogName)

{ }

public override void Update(Subject subject)

{

Console.WriteLine("I'm a dog named {0}, and {1} has come into our house, bar!", Name, subject.Name);

}

}

class Thief : Subject

{

public Thief(string thiefName)

: base(thiefName)

{ }

}

}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值