zoukankan      html  css  js  c++  java
  • 猫、老鼠、主人联动问题

    程序设计: 猫大叫一声,所有的老鼠都开始逃跑,主人被惊醒

    要求: 

    1.要有联动性,老鼠和主人的行为是被动的。

    2.考虑可扩展性,猫的叫声可能引起其他联动效应。

     
    整个思路是采用订阅者设计模式(观察者模式),具体怎么叫就随大家想法。我采用Windows的应用程序讲解
     
    下面是发布者抽象模块
     
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace InterviewDemo
    {
        public delegate void testHandler();
        public abstract class Pubish
        {
            public event testHandler handler;
            public void Activtion()
            {
                if (handler != null)
                {
                    this.handler();
                }
            }
        }
    }
    
    下面是订阅者抽象模块
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace InterviewDemo
    {
        public abstract class Subscription
        {
            public Subscription(Pubish _pubish)
            {
                _pubish.handler += new testHandler(_pubish_handler);
            }
    
            public virtual void _pubish_handler() { }
        }
    }
    

      

      

    猫模块

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    
    namespace InterviewDemo
    {
    
        public class Cat : Pubish
        {
            public string Name { get; private set; }
    
            public Cat(string Name)
            {
                this.Name = Name;
            }
    
            public void Shouted()
            {
                MessageBox.Show(Name + "叫了一声!");
                this.Activtion();
            }
        }
    }
    

    老鼠模块

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    
    namespace InterviewDemo
    {
        public class Mouse : Subscription
        {
            public string Name { get; private set; }
            public Mouse(string Name, Pubish p)
                : base(p)
            {
                this.Name = Name;
            }
            public override void _pubish_handler()
            {
                MessageBox.Show(Name + "听到叫声");
            }
    
        }
    }
    

    主人模块

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    
    namespace InterviewDemo
    {
    
        public class Master : Subscription
        {
    
            public string Name { get; private set; }
    
            public Master(string Name, Pubish p)
                : base(p)
            {
                this.Name = Name;
            }
            public override void _pubish_handler()
            {
                MessageBox.Show(Name + "听到叫声!");
            }
    
        }
    }
    

    程序实现的按钮事件

            private void button1_Click(object sender, EventArgs e)
            {
                Cat cat = new Cat("猫");
                Mouse mouse = new Mouse("老鼠", cat);
                Master master = new Master("主人", cat);
                cat.Shouted();
            }
     
    考这个的目的是在看大家对订阅者模式的熟知度,前面的发布者、订阅者都采用抽象,方便以后的扩展,
    熟悉此模式后可在很多场合应用。

     

  • 相关阅读:
    事件处理
    模板语法
    计算属性和侦听器
    Class 与 Style绑定
    Springboot使用redis
    修改docker-toolbox/boot2docker容器镜像
    docker容器如何安装vim
    Maven+Docker,发布到Registry
    Maven + Docker
    Jenkins-SVN + Maven + Docker
  • 原文地址:https://www.cnblogs.com/jinacookies/p/1999338.html
Copyright © 2011-2022 走看看