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();
            }
     
    考这个的目的是在看大家对订阅者模式的熟知度,前面的发布者、订阅者都采用抽象,方便以后的扩展,
    熟悉此模式后可在很多场合应用。

     

  • 相关阅读:
    关于mysql的wait_timeout参数 设置不生效的问题【转】
    mysql只读模式的设置方法与实验【转】
    ansible批量修改linux服务器密码的playbook
    Serv-U 的升级及数据备份和迁移【转】
    java系统的优化
    JBoss6.1.0修改启动jvm内存以及修改日志级别【转】
    JAVA_OPTS讲解【转】
    RabbitMQ集群、镜像部署配置
    LVS+MYCAT+读写分离+MYSQL主备同步部署手册
    常用数据库高可用和分区解决方案(2) — MongoDB篇
  • 原文地址:https://www.cnblogs.com/jinacookies/p/1999338.html
Copyright © 2011-2022 走看看