您的位置:首页 > 其它

设计模式学习之观察者模式(Observer,行为型模式)(7)

2014-07-09 16:47 627 查看


1.观察者模式又叫做发布-订阅模式。

2.观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己。

3.使用观察者模式的好处:维护相关对象间的一致性。我们不希望为了维持一致性而使各类紧密耦合,这样会给维护、扩展和重用都带来不便。
什么时候使用观察者模式:当一个对象的改变需要同时改变其他对象的时候,而且它不知道具体有多少对象有待改变时,应该考虑使用观察者模式。

private static void Main(string[] args)
{
Boss boss = new Boss();
boss.Update += new StockObserver("股票哥", boss).CloseStockMarket;
boss.Update += new NBAObserver("NBA哥", boss).CloseNBADirectSeeding;
boss.SubjectState = "老板回来了。。。";
boss.Notify();
}

/// <summary>
/// 通知者接口
/// </summary>
public interface ISubject
{
void Notify();

string SubjectState { get; set; }
}

public delegate void EventHandler();

public class Boss : ISubject
{
public event EventHandler Update;

public void Notify()
{
if (Update != null)
{
Update();
}
}

public string SubjectState { get; set; }
}

/// <summary>
/// 前台秘书类
/// </summary>
public class Secretary : ISubject
{
public event EventHandler Update;

public void Notify()
{
if (Update != null)
{
Update();
}
}

public string SubjectState { get; set; }
}

/// <summary>
/// 看股票的同事
/// </summary>
public class StockObserver
{
private string name;
private ISubject subject;

public StockObserver(string name, ISubject subject)
{
this.name = name;
this.subject = subject;
}

public void CloseStockMarket()
{
Console.WriteLine("{0} {1}  关闭股票行情,继续工作!", subject.SubjectState, name);
}
}

/// <summary>
/// 看NBA的同事
/// </summary>
public class NBAObserver
{
private string name;
private ISubject subject;

public NBAObserver(string name, ISubject subject)
{
this.name = name;
this.subject = subject;
}

public void CloseNBADirectSeeding()
{
Console.WriteLine("{0} {1}  关闭NBA直播,继续工作!", subject.SubjectState, name);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: