在某多人联机对战游戏中,多个玩家可以加入同一战队组成联盟,当战队中的某一成员受到敌人攻击时将给所有其他盟友发送通知,盟友收到通知后将做出响应。 现使用观察者模式设计并实现该过程,以实现战队成员之间的联动。

Subject.java

package Game;import java.util.ArrayList;public abstract class Subject {protected String teamName;//战队名字protected ArrayList <Observer> players=new ArrayList<Observer>();//定义一个观察者集合用于存储所有观察者的对象public String getTeamName() {return teamName;}public void setTeamName(String teamName) {this.teamName = teamName;}//添加队友public void join(Observer obs) {System.err.println(obs.getName()+"加入"+this.teamName+"战队!");players.add(obs);}//注销观察者public void quit(Observer obs) {System.err.println(obs.getName()+"退出"+this.teamName+"战队!");players.remove(obs);}//声明抽象通知方法public abstract void Notify(String name);
}

ConcreteSubject.java

package Game;public class ConcreteSubject extends Subject {public ConcreteSubject(String teamName) {System.err.println(teamName+"战队组建成功!");System.err.println("*******************************");this.teamName=teamName;}//声明求救方法@Overridepublic void Notify(String name) {// TODO Auto-generated method stubSystem.err.println(this.teamName+"战队消息:队友"+name+"正在求救!");for(Object obs:players) {if(!((Observer)obs).getName().equalsIgnoreCase(name)) {((Observer)obs).help();}}}}

Observer.java

package Game;public interface Observer {public String getName();public void setName(String name);public void help();                 //声明支援方法public void beAttacked(Subject sub);    //声明遭受攻击方法
}

Player.java

package Game;public class Player implements Observer {private String name;public Player(String name) {this.name=name;}@Overridepublic String getName() {// TODO Auto-generated method stubreturn this.name;}@Overridepublic void setName(String name) {// TODO Auto-generated method stubthis.name=name;}@Overridepublic void help() {// TODO Auto-generated method stubSystem.err.println(this.name+"正在路上");}@Overridepublic void beAttacked(Subject sub) {// TODO Auto-generated method stubSystem.err.println(this.name+"正在求救!");sub.Notify(name);}}

Client.java

package Game;public class Client {public static void main(String[] args) {// TODO Auto-generated method stub//定义观察目标对象Subject s1;s1=new ConcreteSubject("SKT");//定义5个观察者对象Observer player1,player2,player3,player4,player5;player1=new Player("Faker");s1.join(player1);player2=new Player("琴女");s1.join(player2);player3=new Player("蛮王");s1.join(player3);player4=new Player("寒冰");s1.join(player4);player5=new Player("剑圣");s1.join(player5);player1.beAttacked(s1);}}

运行截图;

观察者模式---英雄联盟相关推荐

  1. LOL - 英雄联盟 (2011年腾讯运营的电子竞技类游戏)

    <英雄联盟>(简称LOL)是由美国拳头游戏(Riot Games)开发.中国大陆地区腾讯游戏代理运营的英雄对战MOBA竞技网游. 游戏里拥有数百个个性英雄,并拥有排位系统.符文系统等特色养 ...

  2. 无限卡在观战服务器数据请求失败,lol观战模式进不去_英雄联盟怎么登不上去,一直显示正在观战中...

    英雄联盟观战总是进不去 很多人都有英雄联盟观战进不去的状况. 然后就可以观战了. 扩展资料 英雄联盟观战系统 当你发现名字旁边有个"眼睛"的图标时,说明你可以观看他此时正在进行的比 ...

  3. 一看就懂!【英雄联盟锐雯】与 Python 详解设计模式之门面模式

    [网络配图] 设计模式(Design Pattern)是一套被反复使用.多数人知晓的.经过分类的.代码设计经验的总结.使用设计模式的目的:为了代码可重用性.让代码更容易被他人理解.保证代码可靠性.设计 ...

  4. Python 多进程、协程异步抓取英雄联盟皮肤并保存在本地

    作者 | 俊欣 来源 | 关于数据分析与可视化 就在11月7日晚间,<英雄联盟>S11赛季全球总决赛决斗,在冰岛拉开"帷幕",同时面向全球直播.在经过了5个小时的鏖战, ...

  5. 用 Python 详解《英雄联盟》游戏取胜的重要因素!

    作者 | DeepHub IMBA 责编 | 王晓曼 介绍 在过去的几年里,电子竞技社区发展迅速,曾经只是休闲娱乐的电子竞技产业,到2022年有望创造18亿美元的收入. 虽然在这个生态系统中有很多电子 ...

  6. 官宣!英雄联盟、王者荣耀、街霸……这些电子竞技入选杭州亚运会

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 2021年11月5日,杭州亚运会官方微博发布杭州2022年第19届亚 ...

  7. 用Python分析了1982场英雄联盟数据,开局前预测游戏对局胜负!

    微信改版,加星标不迷路! 用Python分析如何打好英雄联盟? 作者:阿广 概述 前言 假设 游戏对战数据获取 分析和训练数据 游戏对战胜负预测 期望研究的问题 结论 阿广说 推荐阅读 前言 如今,只 ...

  8. git.exe 启动 慢_拳头:今年将修复英雄联盟客户端 启动时间降到19秒

    <英雄联盟>新版客户端自上线以来虽然官方进行过几次修复,但仍然存在不少的BUG,客户端的启动速度和加载速度非常慢.拳头官方今天在官网发布了一篇公告,称未来六个月将会对lol客户端进行修复和 ...

  9. 适合新手练手,用Python爬取OPGG里英雄联盟英雄胜率及选取率,详细讲解加注释(建议收藏练手)

    今天来个简单的小项目,适合新手拿来练手,在OPGG上爬取英雄联盟里的法师,ADC,打野,辅助所有英雄的胜率及选取率,是不是感觉很高大上,但是却很简单,只要用三十多行代码就能实现,详细讲解每一行代码加注 ...

最新文章

  1. with语句和上下文管理器
  2. c语言实现椭圆曲线算法,椭圆曲线加密算法的C语言设计和实现
  3. 织梦 百度sitemap制作教程
  4. ros 消息队列与缓冲区_[ROS] [笔记(1)] 一个最简单的例子:Hello Robot(消息、发布者与订阅者)...
  5. Spring中AOP的两种代理方式(Java动态代理和CGLIB代理)
  6. C++实现线段树(lazy-tag方法)-区间修改,区间查询
  7. “约见”面试官系列之常见面试题第二十七篇之vue-router的重要属性
  8. SpringBoot集成Redis来实现缓存技术方案
  9. 彻底剖析C# 2.0泛型类的创建和使用
  10. LayaAir WebSocket 通信
  11. 云计算里AWS和Azure的探究(3)
  12. linux从字符界面转入图形界面一法
  13. zip知识点的部分总结!
  14. 直接播放H264视频流的方法或工具
  15. 在ArcGIS中使用建模批量将nc文件转换为tif格式并进行裁剪
  16. php ccbsign.rsasig,Maven整合SSM和建行龙支付
  17. 不使用脚手架构建vue项目
  18. 戴尔计算机更新程序,戴尔电脑如何更新显卡驱动 其实很简单-电脑显卡怎么升级...
  19. python 通过tif文件生成经度和纬度的二维矩阵
  20. 2021爱分析・数据智能平台实践报告—重构数据智能时代的数据基础设施

热门文章

  1. nexus7 升级失败后手动刷系统
  2. 【转帖】中国农历规则和日历原理
  3. 爱普生LQ630k针式机使用过程中最常见问题
  4. 使用三方框架FlashView在自己的项目中实现图片轮播
  5. php ucenter,单点登录 Ucenter示例分析
  6. 洛谷P4593 [TJOI2018]教科书般的亵渎
  7. 华硕灵耀 X 双屏 Pro 评测
  8. 统一身份认证登录详细介绍-identity4
  9. 基于启扬i.MX6UL的免疫荧光分析仪解决方案
  10. 企业宣传产品推广PPT模板