·

访问者模式在王者荣耀中的应用

·

一、简述

在王者荣耀的社交系统中有2大核心,一为好友系统二为战队系统,好友系统偏向于个人,战队系统偏向于一个集体。玩家可以自己筹备创建战队、亦可加入其他战队。战队系统让玩家能够寻找到可以一起游戏的小伙伴,让玩家既能玩的嗨起又能领取到丰厚的战队奖励,享受到游戏的真正乐趣!

本实例通过实现王者荣耀“战队系统”的战队管理功能来描述怎样使用访问者模式。具体而言,有多个玩家要加入此战队,但是是否能入队不是玩家自己说了算,而是需要按照申请条件通过战队管理者的审批的(这里的申请条件是战队来确定的,玩家不能自己确定),进而确定是否能入队。

二、访问者模式(Visitor Pattern)

访问者模式理解:
高度概括:表示一个作用于某对象结构中的各个元素的操作。它可以在不改变各个元素的类的前提下定义作用于这些元素的新操作。
在编写类的时候,可能在该类中编写了若干个实例方法,该类的对象通过调用这些实例方法操作其成员变量表明所产生的行为。在某些设计中,可能需要定义作用于类的成员变量的新操作,而且这个新操作不应当由该类中的某个实例方法来承担。
当一个集合中有若干个对象时,习惯上将这些对象称作集合中的元素,访问者模式可以在不改变集合中各个元素类的前提下,定义作用于这些元素上的新操作。

访问者模式结构中的五种角色:
①抽象元素(Element):一个抽象类,该类定义了接收访问者的accept操作;
②具体元素(Concrete Element):Element的子类;
③对象结构(Concrete Element):一个集合,用于存放element对象,提供遍历他自己的方法;
④抽象访问者(Visitor):一个接口,该接口定义操作对象(Concrete Element的实例)的方法;
⑤具体访问者(Concrete Visitor):实现Visitor接口的类。

访问者模式的UML类图:

访问者模式的优缺点:
优点:
①可以在不改变一个集合中元素的类的情况下,增加新的施加于该元素上的新操作;
②可以将集合中各个元素的某些操作集中到访问者中,不仅便于集合的维护,也有利于集合中的元素的复用;
缺点:
①增加新的元素类很困难;
②破坏封装。访问者模式要求访问者对象访问并调用每一个元素对象的操作,这意味着元素对象有时候必须暴露一些自己的内部操作和内部状态,否则无法供访问者访问。

访问者模式的适用情景:
①一个对象结构中,比如某个集合中包含很多对象,想对集合中的对象增加一些新的操作;
②需要对集合中的对象进行很多不同的并且不相关的操作,而又不想修改对象的类,就可以使用访问者模式,访问者模式可以在Visitor类中集中定义一些关于集合中对象的操作。

三、王者荣耀角度下实现访问者模式结构图及代码

eclipse结构图

主函数【应用(Application)】
Applicayion.java

package angle_visitorPattern;import angle_visitorPattern.Players;
import angle_visitorPattern.CombatTeamLeader;
import angle_visitorPattern.WantEnterCombatTeamPlayers;
import angle_visitorPattern.Visitor;import java.util.ArrayList;
import java.util.Iterator;
public class Application{public static void main(String args[]) {Visitor visitor=new CombatTeamLeader();ArrayList<Players>  playerList=new  ArrayList<Players>();Players player=null;System.out.println("  ");System.out.println("★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★");System.out.println("【战队招人公告】等级大于20级且段位在王者10星之上的玩家经队长同意后即可加入!");System.out.println("★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★");System.out.println("  ");System.out.println("☆申请入队玩家信息:");System.out.println("        玩家名字[AG超玩会靓荣] 等级[30] 段位[最强王者36星]");playerList.add(player=new WantEnterCombatTeamPlayers("[AG超玩会靓荣]",30,36));System.out.println("        玩家名字[瑶宝宝上我]   等级[25] 段位[最强王者3星]");playerList.add(player=new WantEnterCombatTeamPlayers("[瑶宝宝上我]",25,3));System.out.println("          ……");System.out.println("  ");System.out.println("☆成功加入战队玩家:");Iterator<Players> iter=playerList.iterator();while(iter.hasNext()){Players players=iter.next();players.accept(visitor);  }System.out.println("          ……");}
} 

抽象元素(Element)
Players.java

package angle_visitorPattern;import angle_visitorPattern.Visitor;public abstract class Players{public abstract void accept(Visitor v);
}

具体元素(Concrete Element)
WantEnterCombatTeamPlayers.java

package angle_visitorPattern;public  class WantEnterCombatTeamPlayers extends Players{int grade,duan;    //成绩String name;WantEnterCombatTeamPlayers(String name,int grade,int duan){this.name=name;this.grade=grade;this.duan=duan;} public int getGrade(){return grade;} public int getDuan(){return duan;} public String getName(){return name;}public void accept(Visitor v){v.visit(this);}
}

访问者(Visitor)
Visitor.java

package angle_visitorPattern;import angle_visitorPattern.WantEnterCombatTeamPlayers;public interface Visitor{public void visit(WantEnterCombatTeamPlayers player);
}

具体访问者(Concrete Visitor)
CombatTeamLeader.java

package angle_visitorPattern;import angle_visitorPattern.WantEnterCombatTeamPlayers;
import angle_visitorPattern.Visitor;public class  CombatTeamLeader implements Visitor{public void visit(WantEnterCombatTeamPlayers player){int grade=player.getGrade();int duan=player.getDuan();if(grade>20&&duan>30)System.out.println("        同意"+player.getName()+"加入战队!"); elseSystem.out.println("        不同意"+player.getName()+"加入战队!");}
}

运行结果截图

更多设计模式在王者荣耀中的应用请点击我的→设计模式在王者荣耀中的应用专栏

欢迎留言,一起学习交流~

感谢阅读

END

在王者荣耀角度下分析面向对象程序设计B中23种设计模式之访问者模式相关推荐

  1. 在王者荣耀角度下分析面向对象程序设计B中23种设计模式之工厂方法模式

    · 工厂方法模式在王者荣耀中的应用 · 一.简述 王者荣耀这款游戏目前一共有100位英雄,游戏设计师根据英雄技能.属性.天赋等因素,将英雄划分为射手.辅助.打野.法师.坦克.战士等职业. 在本实例中, ...

  2. 在王者荣耀角度下分析面向对象程序设计B中23种设计模式之责任链模式

    · 责任链模式在王者荣耀中的应用 · 一.简述 在王者荣耀商城中,玩家可以参与夺宝抽奖.夺宝抽奖分两种,一种是积分抽奖,另一种是钻石抽奖:在平常,两种夺宝抽奖方式均可以通过60钻石/积分抽奖一次,或者 ...

  3. 在王者荣耀角度下分析面向对象程序设计B中23种设计模式之原型模式

    · 原型模式在王者荣耀中的应用 · 一.简述 在王者荣耀中,克隆模式算是一个人气比较高的娱乐模式了,因为该模式下双方可以各有五个一模一样的英雄,可以带给玩家不同的游戏体验,特别是有一些比较好玩的英雄, ...

  4. 在王者荣耀角度下分析面向对象程序设计B中23种设计模式之策略模式

    · 策略模式在王者荣耀中的应用 · 应用一:[登录游戏前]选择通过何种方式登录游戏 应用二:[游戏开始前]选择英雄及其召唤师技能 应用三:[游戏开始后]选择使用普攻还是技能 一.简述 登录游戏前,玩家 ...

  5. 在王者荣耀角度下分析面向对象程序设计B中23种设计模式之备忘录模式

    · 备忘录模式在王者荣耀中的应用 · 一.简述 在王者荣耀的游戏中,贤者的庇护这件装备设计的初衷是提高容错率,常常出现在游戏后期,玩家通过装备贤者的庇护在危急时刻可以实现复活效果,进而保命. 二.备忘 ...

  6. 在王者荣耀角度下分析面向对象程序设计B中23种设计模式之组合模式

    · 组合模式在王者荣耀中的应用 · 一.简述 王者荣耀有非常多的英雄,而且每一个不同的英雄也有其自己对应的皮肤.玩家可以根据需要购买不同的英雄皮肤,体验不同英雄皮肤在对局中的感受. 在本实例中,根据组 ...

  7. 在王者荣耀角度下分析面向对象程序设计B中23种设计模式之装饰模式

    · 装饰模式在王者荣耀中的应用 · 一.简述 在王者荣耀这款游戏中,英雄在战场上高伤害.高爆发.高移速等是所有玩家共同追求的,那么这些所谓的伤害.移速.穿透力等英雄属性我们可以通过在局外对英雄附带皮肤 ...

  8. 在王者荣耀角度下分析面向对象程序设计B中23种设计模式之代理模式

    · 代理模式在王者荣耀中的应用 · 应用一(虚拟代理模式) 应用二(远程代理模式) 应用三(充值送好礼) 一.简述 应用一: 在王者荣耀这款游戏里,设置有很多种娱乐游戏模式,比如:无限乱斗.梦境大乱斗 ...

  9. 在王者荣耀角度下分析面向对象程序设计B中23种设计模式之单件模式

    · 单件模式在王者荣耀中的应用 · 一.简述 今年春节王者荣耀出了一个叫做"王者快跑"的限时玩法,许多玩家都很喜欢这个游戏模式.不同于5V5的王者地图,这个地图是一个跑道中途有很多 ...

最新文章

  1. Linux下使用service启动jar包.md
  2. MPEG-7 视觉描述符
  3. ref out 的使用
  4. 内核态(Kernel Mode)与用户态(User Mode)
  5. (一)Linux 常用命令
  6. python中print说法正确的是_python中的print()输出
  7. 华为服务器_RH2288H V3介绍
  8. 如何把PDF中的一页内容替换掉
  9. 猿辅导--课程质量建设
  10. 计算机专业的女孩穿搭,大学里女生一般喜欢男生怎样穿搭
  11. 如何查找本台计算机的ip地址吗,电脑ip地址查询方法,查找电脑的ip地址方法-
  12. 网通相中中国联通GSM网络 联通暂无意租售
  13. echarts 饼图悬浮频繁闪动
  14. 手机android的文件怎么恢复,安卓手机怎样恢复删除的文件
  15. 泛微ecology 公文管理功能相关的几张表
  16. 解读新“拍拍”:搞臭C2C 抱淘宝一起死
  17. 【AD】Altium Designer PCB文件的绘制(下篇:PCB布线和后续)
  18. 几款主流的浏览器速度测试
  19. 安全类系列资质认证,你都了解嘛?
  20. 日本电视连续剧《阿信》主题歌歌词—永远相信

热门文章

  1. 孤岛求生记JAVA攻略_我的世界1.7.10贝爷的真实世界生存整合包
  2. HTML练习之路10
  3. vue 商城项目 用户页面,上传头像 存储
  4. JS字符串类型 运算符 分支
  5. jupyter notebook外网远程登录--花生壳内网端口映射
  6. 【转载】游戏----攻击判定流程研究
  7. 【系统更新】走捷径让vr全景制作事半功倍!
  8. 数学软件,统计软件,珠宝软件
  9. iOS实现获取系统iTunes音乐的方法示例
  10. 分发糖果的程序设计代码_糖果为您设计的颤动交互引擎