当前位置: 首页 > news >正文

设计模式-观察者模式

概述

观察者模式是一种行为型的设计模式其主要的是分为观察者和被观察者两部分,当被观察者出现任何变化的时候,会通知所有的观察者,主要就是这个逻辑。组成部分分为观察者接口,主题接口,具体的主题(被观察者),观察者当被观察者的发生变化的时候,注册观察的所有观察者都被通知,举个例子,当点击游戏开始按钮的时候,所有注册游戏开始按钮事件的方法都会被执行,观察者模式,就好比事件的触发


例子:在我的世界中,僵尸发现村民在一定范围内的时候会追击村民,在范围外的时候不会追击。

观察者模式

using static POC;
using System.Numerics;internal class Program
{private static void Main(string[] args){Villager villager = new Villager();Zombie zombieOne = new Zombie("小绿", new Vector3(1, 1, 1));Zombie zombieTwe = new Zombie("小白", new Vector3(3, 5, 7));Zombie zombieThree = new Zombie("小黑", new Vector3(10, 16, 15));villager.RegisterObserver(zombieOne);villager.RegisterObserver(zombieTwe);villager.RegisterObserver(zombieThree);Console.WriteLine("----------------------------");villager.SetPosition(new Vector3(0, 0, 0));//村民位置移动到0,0,0点Console.WriteLine("----------------------------");villager.SetPosition(new Vector3(5, 5, 7));//村民位置移动到5,5,7点}public interface IObserver//观察者接口{void Update(Vector3 positon);}public interface ISubject//主题接口{void RegisterObserver(IObserver observer);void RemoveObserver(IObserver observer);void NotifyObservers();}public class Villager : ISubject//村民类{private List<IObserver> _observers = new List<IObserver>();private Vector3 positon;public void RegisterObserver(IObserver observer){_observers.Add(observer);}public void RemoveObserver(IObserver observer){_observers.Remove(observer);}public void NotifyObservers(){foreach (var observer in _observers){observer.Update(positon);}}public void SetPosition(Vector3 pos){positon = pos;NotifyObservers();}}public class Zombie : IObserver//僵尸类{private Vector3 _position;private Vector3 villager_Position;private string Name;public Zombie(string name, Vector3 pos){Name = name;_position = pos;}public void Update(Vector3 position){villager_Position = position;CheckDistance();}public void CheckDistance(){if (Vector3.Distance(villager_Position, _position) <= 5){Console.WriteLine($"僵尸{Name}追击村民");}else{Console.WriteLine($"僵尸{Name}距离不够,不追击村民");}}}
}

输出结果

----------------------------
僵尸小绿追击村民
僵尸小白距离不够,不追击村民
僵尸小黑距离不够,不追击村民
----------------------------
僵尸小绿距离不够,不追击村民
僵尸小白追击村民
僵尸小黑距离不够,不追击村民


http://www.mrgr.cn/news/57.html

相关文章:

  • 修改了原神4.8版本升级数据表
  • Android笔试面试题AI答之Kotlin(15)
  • 在Linux系统下安装、配置ETCD
  • C语言enum枚举
  • MySQL 常用 SQL 语句大全
  • UE5学习笔记15-BginPlay事件、Tick事件
  • 前端(Vue)动态换肤的通用解决方案及原理分析(2)
  • 《基于CT的人工智能预后模型在非小细胞肺癌切除术中的临床应用》| 文献速递-基于深度学习的乳房、前列腺疾病诊断系统
  • 智能外呼机器人助力电销
  • C++ | Leetcode C++题解之第342题4的幂
  • 基于SpringBoot框架的能源管理系统源代码(100%开源无加密)
  • Android -- 谷歌地图绘制
  • Haproxy、mysql读写分离、python读写分离
  • 无法判断编程器固件类型
  • Django基础之MTV模型
  • Xilinx XAPP585相关
  • Delphi中的魔法注入:依赖注入的神秘面纱
  • 测试金山文档 | WPS云文档
  • android13顶部状态栏里面调节背光 背景闪烁问题
  • 计算机网络面试题汇总