• IssueVision 之模式篇


    一、观察者模式
    IObserver
      ExecuteNotify(ISubject subject)


    ISubject
      AddObserver(IObserver observer)
      RemoveObserver(IObserver observer)
      ObserversCount { 
    get }
      ClearObservers()
      SetChanged()
      HasChanged { 
    get }

      NotifyObservers()
      {
        
    foreach (IObserver observer in Observers)
        {
          observer.ExecuteNotify(
    this);
        }
      }

    二、命令模式
    public class Command
    {
        
    public delegate void EnableChangedEventHandler(object sender, Command.EnableChangedEventArgs e);
        
    public virtual event EnableChangedEventHandler EnableChanged;
        
    public delegate void Action();
            
        
    private Action m_action;
        
    private bool m_isEnabled = true;
            
        
    public bool IsEnabled
        {
            
    get
            {
                
    return m_isEnabled;
            }

            
    set
            {
                
    if (m_isEnabled != value)
                {
                    m_isEnabled 
    = value;
                    
    if (EnableChanged != null)
                    {
                        EnableChanged(
    thisnew EnableChangedEventArgs(IsEnabled));
                    }
                }
            }
        }

        
    public Command(Action action)
        {
            m_action 
    = action;
        }

        
    // Invokes the method assigned to this command.
        public void Execute()
        {
            m_action();
        }
            
        
    // Arguments passed to the EnableChanged event.
        public class EnableChangedEventArgs : EventArgs
        {
            
    private bool m_isEnabled = false;
            
    public bool IsEnabled
            {
                
    get
                {
                    
    return m_isEnabled;
                }
            }

            
    public EnableChangedEventArgs(bool isEnabled)
            {
                m_isEnabled 
    = isEnabled;
            }
        }
    }

    // base Commander class
    public abstract class Commander
    {
        
    protected Command m_command;
        
    protected abstract void HandleEnableChangedEvent(object sender, Command.EnableChangedEventArgs e);

        
    protected Commander(Command command)
        {
            m_command 
    = command;
            m_command.EnableChanged 
    += new Command.EnableChangedEventHandler(this.HandleEnableChangedEvent);
        }
    }

    // MenuItemCommander class
    public class MenuItemCommander : Commander
    {
        
    private MenuItem m_item;

        
    protected MenuItemCommander(MenuItem item, Command command) : base(command)
        {
            m_item 
    = item;
            m_item.Click 
    += new EventHandler(this.HandleUIEvent);
        }

        
    protected override void HandleEnableChangedEvent(object sender, Command.EnableChangedEventArgs e)
        {
            m_item.Enabled 
    = e.IsEnabled;
        }

        
    private void HandleUIEvent(object sender, EventArgs e)
        {
            m_command.Execute();
        }

        
    // Connect is a shared (static) method that performs the task of adapting a menu
        
    // item to a command.  The commander exists only to wire up the two objects -- 
        
    // it is not used further
        public static void Connect(MenuItem item, Command command)
        {
            MenuItemCommander unused 
    = new MenuItemCommander(item, command);
        }
    }
  • 相关阅读:
    Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.12.4:test (default-test)
    maven打包报错:Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.5:test
    关于log4j:WARN No appenders could be found for logger (org.apache.hadoop.metrics2.lib.MutableMetricsFactory).的问题
    maven-source 1.3 中不支持注释请使用 -source 5 或更高版本以启用注释
    <Android基础>(二) Activity Part 1
    <Android基础>(一)
    数制
    第二次实验报告:使用Packet Tracer分析应用层协议
    在Windows Server 2003中搭建DNS服务器
    第一次作业:使用Packet Tracer分析HTTP包
  • 原文地址:https://www.cnblogs.com/hcfalan/p/846288.html
Copyright © 2020-2023  润新知