• 18.观察者模式(Observer Pattern)


    原文
        http://www.cnblogs.com/Terrylee/archive/2006/10/23/Observer_Pattern.html
    意图

    定义对象间的一种一对多的依赖关系,当一个对象(Subject)的状态发生改变时, 所有依赖于它的对象(观察者Observer)都得到通知并被自动更新。[GOF 《设计模式》]


    实例: 猫大叫一声,所有的老鼠都开始逃跑,主人被惊醒。(C#语言)
          http://www.cnblogs.com/EasyLive2006/archive/2007/04/28/730805.html

     1//观察者的接口
     2public interface IObserver
     3{
     4    void Response();    //观察者的响应
     5}

     6
     7//主题的接口
     8public interface ISubject
     9{
    10    void AimAt(IObserver obs);  //在主题中添加观察者,以便让这些观察者作出响应
    11}

    12
    13//定义老鼠这个观察者
    14public class Mouse : IObserver
    15{
    16    private string name;
    17    public Mouse(string name, ISubject subj)
    18    {           
    19        this.name = name;
    20        subj.AimAt(this);//创建老鼠时,在主题中添加这个老鼠
    21    }

    22
    23    public void Response()
    24    {
    25        Console.WriteLine(name + " attempt to escape!");
    26    }

    27}

    28
    29//定义主人这个观察者
    30public class Master : IObserver
    31{   
    32    public Master(ISubject subj)
    33    {           
    34        subj.AimAt(this);//创建主人时,在主题中添加这个老鼠
    35    }

    36
    37    public void Response()
    38    {
    39        Console.WriteLine("Host waken!");
    40    }
      
    41}

    42
    43//定义猫这个主题
    44public class Cat : ISubject
    45{
    46    private ArrayList observers;
    47    public Cat()
    48    {   
    49        this.observers = new ArrayList();
    50    }

    51    public void AimAt(IObserver obs)
    52    {
    53        this.observers.Add(obs);
    54    }

    55
    56    //主题动作(哭)的时候,找到它所瞄准的所有对象,并让这些对象作出响应
    57    public void Cry()
    58    {
    59        Console.WriteLine("Cat cryed!");
    60        foreach (IObserver obs in this.observers)
    61        {
    62        obs.Response();
    63        }

    64    }

    65}

    66
    67//运行
    68class MainClass
    69{       
    70    static void Main(string[] args)
    71    {
    72        Cat cat = new Cat();            //创建主题----猫
    73        Mouse mouse1 = new Mouse("mouse1", cat);    //创建观察者----老鼠1,并让主题(猫)瞄准它
    74        Mouse mouse2 = new Mouse("mouse2", cat);    //创建观察者----老鼠2,并让主题(猫)瞄准它
    75        Master master = new Master(cat);        //创建观察者----主人,并让主题(猫)瞄准它
    76        cat.Cry();                //主题动作(哭)时,让瞄准的对象作出响应
    77    }

    78}

    79


  • 相关阅读:
    LA 3882
    Codeforces 161D
    spoj PARTIT
    uva 10496 Collecting Beepers
    uva 10130 SuperSale
    spoj 3885
    NWERC 2012 Problem I Idol
    NWERC 2012 Problem E Edge Case
    【USACO 1.3.2】修理牛棚
    【USACO 1.3.1】混合牛奶
  • 原文地址:https://www.cnblogs.com/liuweitoo/p/877341.html
Copyright © 2020-2023  润新知