从王者荣耀看设计模式(远程代理模式)

本文通过王者荣耀场景讲解了远程代理设计模式,利用Java RMI创建了一个远程接口AccountStatus,实现游戏账号的在线和下线状态控制。服务端创建并注册远程对象,客户端通过查找RMI注册表获取代理对象,从而调用远程方法。远程代理模式简化了客户端与远程对象的交互,隐藏了网络通信细节。

从王者荣耀看设计模式(远程代理模式)

一.简介

每位王者荣耀玩家都有一个属于自己的游戏账号。为了提升游戏等级或者增加游戏体验感,会存在多个游戏玩家同时共享一个游戏账号的情况。当一位玩家使用账号正在游戏中时,另一玩家登陆同一账号会导致前一玩家强制退出登陆!(ಥ_ಥ)

模式动机
在本实例中,通过远程代理,我们可以实现远程控制。当我处于在线状态时,使用代理让同一账号的使用者下线

二.远程代理(帮助我们控制访问远程对象)

远程代理可以作为另一个JVM上对象的本地代表。调用代理的方法,会被代理利用网络转发到远程执行,并且结果会通过网络返回给代理,再由代理将结果返回给客户。
代理,就是代表某一真实对象,假装它是真正的对象。但是其实一切的动作是代理对象利用网络和真正的对象沟通o(´^`)o 代理之所以需要控制访问,是因为我们的客户不知道如何和远程对象沟通。从某些方面来看,远程代理控制访问,可以帮助我们处理网络上的细节
变量只能引用和当前代码语句在同一堆空间中的对象,Java有内置远程调用的功能可以帮助我们实现远程代理

三.结构图

四.设计类图

五.代码实现

AccountStatus类(远程接口类)

package com.practice.MyRemote;

import java.rmi.Remote;
import java.rmi.RemoteException;
/*
 * 客户端和服务端统一的接口,只需要服务端根据这个接口实现相应的功能,然后注册上去,
 * 客户端就可以根据这个接口来使用相应的功能
 *
 * 定义一个远程接口,必须继承Remote接口,其中需要远程调用的方法必须抛出RemoteException异常
 */
public interface AccountStatus extends Remote {
	public void OnlineStatus() throws RemoteException;//玩家在线状态
	public void OfflineStatus() throws RemoteException;//玩家下线状态
}

AccountStatusHelper(接口实现类<代理>)

package com.practice.MyRemote.Imple;

import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
import com.practice.MyRemote.AccountStatus;

public class AccountStatusHelper extends UnicastRemoteObject implements AccountStatus {
	private static final long serialVersionUID = 1L;
	@SuppressWarnings("unused")
	private boolean Online = false;

	public AccountStatusHelper(boolean _Online) throws RemoteException {
		this.Online = _Online;
	}
	
	@Override
	public void OnlineStatus() throws RemoteException {
		System.out.println("玩家1正使用账号游戏中……");
	}

	@Override
	public void OfflineStatus() throws RemoteException {
		System.out.println("玩家1退出王者荣耀账号!");
	}

}

Server(服务类)


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值