zoukankan      html  css  js  c++  java
  • 【2016-10-10】【坚持学习】【Day1】【观察者模式】

    今天学习了观察者模式

    定义:

    一个实体变化会影响其他实体变化

    例子:

    红绿灯与汽车

    红绿灯是观察目标

    汽车是实际观察者

    灯的变化会影响车是停止还是前进。

    例子:

    游戏中,一个战队由若干队员组成,当其中一个受到攻击,就要通过战队中心呼叫其他队友支援。

    using System.Collection
    abstract class Subject
    {
        //定义一个观察者集合用于存储所有观察者对象
    protected ArrayList observers = new ArrayList();
    //声明抽象注册方法,用于向观察者集合中增加一个观察者
        public abstract void Attach(Observer observer);
    //声明抽象注销方法,用于在观察者集合中删除一个观察者
        public abstract void Detach(Observer observer);
        //声明抽象通知方法
        public abstract void Notify();
    }
    View Code
    class ConcreteSubject : Subject
    {
        public override void Attach(Observer observer)
        {
            observers.Add(observer);
        }
        
        public override void Detach(Observer observer)
        {
            observers.Remove(observer);
        }
        
                    //实现通知方法
        public override void Notify()
        {
                                    //遍历观察者集合,调用每一个观察者的响应方法
            foreach(object obs in observers)
            {
                ((Observer)obs).Update();
            }
        }
    }
    View Code
    interface Observer
    {
        void Update();
    }
    
    
    class ConcreteObserver : Observer
    {
                     //实现响应方法
        public void Update()
        {
            //具体更新代码
        }
    }
    View Code

     调用

    ……
    Subject subject = new ConcreteSubject();
    Observer observer = new ConcreteObserver();
    subject.Attach(observer);
    subject.Notify();
    ……
    View Code

    作者:zscmj
    出处:http://www.cnblogs.com/zscmj/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    C# 中的委托和事件
    css样式大全(整理版)
    (转)VS2010 快捷键
    委托小例子
    .NET中Cache的使用
    ObjectiveC面向对象编程继承
    ObjectiveC简介
    ObjectiveC面向对象编程实例化对象、构造函数
    MSSql的多表关联的update语句
    ObjectC 与 Java 区别
  • 原文地址:https://www.cnblogs.com/zscmj/p/5952587.html
Copyright © 2011-2022 走看看