zoukankan      html  css  js  c++  java
  • .net中的观察者模式(用delegate/event实现)

    using System;

    namespace ConsoleApplication1
    {


        
    //用户界面(观察者1)
        public class SomeKindOfUI
        
    {
            
    public void Show(object anObject)
            
    {
                
    if (anObject is SomeData)
                
    {
                    ImpShow((SomeData)anObject);
                }

            }


            
    public void ImpShow(SomeData data)
            
    {
                Console.WriteLine(
    "Observe1. The new ask price is: " + data.AskPrice);
            }

        }


        
    //用户界面(观察者2)
        public class AnotherKindOfUI
        
    {
            
    public void Show(object anObject)
            
    {
                
    if (anObject is SomeData)
                
    {
                    ImpShow((SomeData)anObject);
                }

            }


            
    public void ImpShow(SomeData data)
            
    {
                Console.WriteLine(
    "Observe2. The new ask price is: " + data.AskPrice);
            }

        }



        
    //业务数据(被观察对象)
        public class SomeData 
        
    {

            
    public delegate void UpdateHandler(object sender);
            
    public event UpdateHandler UpdateEvent;

            
    //被观察者中的数据
            float _askPrice;

            
    //改变数据的属性
            public float AskPrice 
            
    {
                
    set 
                
    {
                    _askPrice 
    = value;
                    
    if (UpdateEvent != null)
                        UpdateEvent(
    this);
                }

                
    get
                
    {
                    
    return _askPrice;
                }

            }

        }
     


        
    /// <summary>
        
    /// Summary description for Class1.
        
    /// </summary>

        class Class1
        
    {
            
    /// <summary>
            
    /// The main entry point for the application.
            
    /// </summary>

            [STAThread]
            
    static void Main(string[] args)
            
    {
                SomeKindOfUI ui 
    = new SomeKindOfUI();
                AnotherKindOfUI anoth 
    = new AnotherKindOfUI();
                SomeData data 
    = new SomeData();
                data.UpdateEvent 
    += new SomeData.UpdateHandler(ui.Show);//observer1
                data.UpdateEvent += new SomeData.UpdateHandler(anoth.Show);//observer2
                data.AskPrice = 6789.2f;
            }

        }

    }

  • 相关阅读:
    从POJ1958引发对n盘m塔Hanoi问题的思考
    SPOJGSS3 Can you answer these queries III
    【模板】SPFA判负环(洛谷P3385)
    【模板】强联通缩点(洛谷P3387)
    Luogu P2186 小Z的栈函数
    Luogu P2129 小Z的情书
    LGBT学分块
    LGBT玩扫雷
    A 美丽的子树
    B(升降序列)
  • 原文地址:https://www.cnblogs.com/silva/p/266502.html
Copyright © 2011-2022 走看看