设计模式之观察者模式——猫抓老鼠1
设计模式之观察者模式——猫抓老鼠:
问题描述:
通过猫抓老鼠的例子进行了解观察者模式,首先的初始代码为(有三个类):
using System;/// <summary>
/// 观察者设计模式——猫抓老鼠
/// </summary>
namespace Unity_Observe_mode
{class Program{static void Main(string[] args){Cat cat = new Cat("加菲", "黄色");Mouse mouse1 = new Mouse("米奇", "白色");Mouse mouse2 = new Mouse("米糊", "灰色");cat.CatComing(mouse1,mouse2);//猫的状态发生改变Console.ReadKey();}}
}
猫类:
using System;
using System.Collections.Generic;
using System.Text;/// <summary>
/// 观察者设计模式——猫抓老鼠
/// </summary>namespace Unity_Observe_mode
{/// <summary>/// 猫类/// </summary>class Cat{private string name;private string color;public Cat(string name,string color){this.name = name;this.color = color;}/// <summary>/// 猫的状态发生改变(被观察者状态发生改变)/// </summary>public void CatComing(Mouse mouse1,Mouse mouse2){Console.WriteLine(color + "的猫" + name + "过来了,喵喵喵!!");mouse1.RunAway();mouse2.RunAway();}}
}
老鼠类:
using System;
using System.Collections.Generic;
using System.Text;/// <summary>
/// 观察者设计模式——猫抓老鼠
/// </summary>
namespace Unity_Observe_mode
{/// <summary>/// 老鼠类-观察者类/// </summary>class Mouse{private string name;private string color;public Mouse(string name,string color){this.name = name;this.color = color;}public void RunAway(){Console.WriteLine(color + "的老鼠" + name + "说:老猫来了,赶紧跑! ");}}
}
分析:
首先,我们编写了三个类,其中猫为被观察者,而老鼠为观察者,当猫状态发生改变时,老鼠也相应的发生改变,如上代码便做到了这一点。
但是这种方案存在一个缺点:
如下代码:
public void CatComing(Mouse mouse1,Mouse mouse2,Mouse mouse3){Console.WriteLine(color + "的猫" + name + "过来了,喵喵喵!!");mouse1.RunAway();mouse2.RunAway();mouse3.RunAway();}
Mouse mouse1 = new Mouse("米奇", "白色");Mouse mouse2 = new Mouse("米糊", "灰色");Mouse mouse3 = new Mouse("米啊", "红色色");cat.CatComing(mouse1,mouse2,mouse3);//猫的状态发生改变
当新的观察者加入时,需要在猫类的方法中进行更改,这样会使代码越来越繁琐,而且我们希望写好一个猫类后尽量少改动其代码(对比初始代码)
通过委托进行优化:
我们在猫类中定义一个委托,然后将老鼠的方法加入委托中:
using System;/// <summary>
/// 观察者设计模式——猫抓老鼠
/// </summary>
namespace Unity_Observe_mode
{class Program{static void Main(string[] args){Cat cat = new Cat("加菲", "黄色");Mouse mouse1 = new Mouse("米奇", "白色");cat.catCome += mouse1.RunAway;Mouse mouse2 = new Mouse("米糊", "灰色");cat.catCome += mouse2.RunAway;Mouse mouse3 = new Mouse("米啊", "红色色");cat.catCome += mouse3.RunAway;//cat.CatComing(mouse1,mouse2,mouse3);//猫的状态发生改变,在cat中调用了观察者的方法,当观察者发生改变时,需要同时修改被观察者的代码,代码耦合性高了,不好!!cat.CatComing();Console.ReadKey();}}
}
猫类:
using System;
using System.Collections.Generic;
using System.Text;/// <summary>
/// 观察者设计模式——猫抓老鼠
/// </summary>namespace Unity_Observe_mode
{/// <summary>/// 猫类/// </summary>class Cat{private string name;private string color;public Cat(string name,string color){this.name = name;this.color = color;}/// <summary>/// 猫的状态发生改变(被观察者状态发生改变)/// </summary>public void CatComing(){Console.WriteLine(color + "的猫" + name + "过来了,喵喵喵!!");if(catCome!=null)catCome();}public Action catCome;//定义一个委托//public void CatComing(Mouse mouse1,Mouse mouse2,Mouse mouse3)//{// Console.WriteLine(color + "的猫" + name + "过来了,喵喵喵!!");// mouse1.RunAway();// mouse2.RunAway();// mouse3.RunAway();//}}
}
通过这样的方法降低了代码的耦合性。最后运行效果:
观察者模式—猫抓老鼠1,后面猫抓老鼠2将继续进行优化!
设计模式之观察者模式——猫抓老鼠1相关推荐
- 设计模式之观察者模式——猫抓老鼠2
设计模式之观察者模式--猫抓老鼠2: 对猫抓老鼠1再次进行优化,降低代码复杂性,以及使用事件来对方法进行保护 代码优化: 将老鼠代码进行优化,将自己的方法在构造时便注册到猫里面: using Syst ...
- 猫抓老鼠-Java面向对象特点梳理
我们先设计一个猫抓老鼠的小游戏: ⊙猫和老鼠都有名字和体重两种属性,猫有抓老鼠的方法,对应的老鼠则有逃跑的方法. ⊙首先游戏的结果是猫抓住了老鼠或者老鼠逃跑了,对于这两种情况,我们用体重来区分,若猫的 ...
- java猫抓老鼠_猫抓老鼠-Java面向对象特点梳理
我们先设计一个猫抓老鼠的小游戏: ⊙猫和老鼠都有名字和体重两种属性,猫有抓老鼠的方法,对应的老鼠则有逃跑的方法. ⊙首先游戏的结果是猫抓住了老鼠或者老鼠逃跑了,对于这两种情况,我们用体重来区分,若猫的 ...
- 猫抓老鼠c语言程序,猫抓老鼠问题C++实现一例(约瑟夫环问题)
今天偶然在网上看到了猫抓老鼠问题, 当时也没多想,只觉得网上给出的程序的确有很多需要改进的地方, 就闷头闷脑的用 循环链表 和 递归 写了一个算法实现,后来发现 这个问题实际上是经典的约瑟夫环问题的变 ...
- java猫抓老鼠_用猫抓老鼠的实例理解java中面向对象的编程与类和对象以及方法的概念...
今天看到马士兵讲的关于面向对象编程的思路,用了一个猫抓老鼠的例子,我觉得这个例子非常形象,于是写在这里,方便学习理解和以后查看 class cat{ //声明一个类–"猫" int ...
- 实验吧WEB CTF 猫抓老鼠 全网最简单易懂的解题方法
前言 题目网址: 实验吧平台升级维护中 需要用到的工具: burpsuite 官方视频教程: 01 02 开始 首先打开burpsuite,切换到Proxy选项卡,确保intercept是关着的. 打 ...
- 面向对象之猫抓老鼠小游戏
面向对象之猫抓老鼠小游戏: 猫类的创建: 代码: package com.softeem.lesson08.example;public class Cat {private String name; ...
- CTF---Web入门第七题 猫抓老鼠
猫抓老鼠分值:10 来源: 实验吧 难度:难 参与人数:8697人 Get Flag:3740人 答题人数:3944人 解题通过率:95% catch!catch!catch!嘿嘿,不多说了,再说剧透 ...
- 实验吧 WEB 猫抓老鼠
人生的第一道CTF题目哇,鸡冻 其实只是学了一下HTTP抓包得到的都是什么,就开始上手胡搞了 题目名字叫猫抓老鼠,还疯狂暗示catch!catch!catch!catch!,就想到要用抓包其实我是因为 ...
最新文章
- 图像与视频合成领域的集大成者,都在这里了!
- PIE SDK图层树伙伴控件示例
- mysql mtop_mysqlmtop2.2运行出错
- linux 与window 相互共享命令
- 零基础学习嵌入式给出的10条中肯的建议
- Java实现冒泡排序算法
- Python制作一个科学计算器
- 【重装Windows的十大理由】
- 生鲜电商之百果园的未来
- 数据库课程设计------书店管理系统
- 特殊的搜狗拼音输入法
- 蓝牙模块HC05遇到的一些常见的问题
- php1.6t发动机机油选择,1.6t用什么机油选择啊!?
- KNN 在手写识别中的应用(Java 实现)
- ueditor 工具栏配置_Ueditor文本编辑工具栏自定义
- 与SCI主编邮件沟通模板
- 苹果6如何截屏_手机截屏新方法,点击屏幕就能轻松截屏,方法很简单,一看就会...
- Python学习笔记-Day2
- Mac 抓取iOS手机端的crash日志操作
- YSlow开发:自定义规则集
热门文章
- FFmpeg入门详解之124:Qt5 FFmpeg单路网络摄像头采集预览
- WaveSwipeRefreshLayout实现微信热文精选,微信热文安卓app版,activity中viewpager套fragment
- CPU与GPU区别 通俗易懂
- shell脚本掐头去尾
- UEFI引导+GPT分区模式如何安装win10原版镜像或ghost版
- 开源web框架_带有酷名称的开源JavaScript和Web框架的词汇表
- 微信iOS长按无法识别二维码
- 网上书店信息管理系统--基于Mysql数据库与java
- 30岁程序员:总在错过风口,终于熬成“码畜”
- 硬件工程师成长之路(0)----认识元件