设计23式—代理

本文通过具体的代码实例详细介绍了代理模式的概念及其优点,包括职责清晰、高扩展性和智能化等,并展示了普通代理和强制代理的具体实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

个人对于代理模式的理解

/*
 * 代理模式
 * 优点
 * 职责清晰
 * 高扩展性
 * 智能化
 */
public class MyMain {

	public static void main(String[] args) {
		//定义一个玩家
		IGamePlayer gamePlayer=new GamePlayer("老九");
		//定义一个代打玩家
		GamePlayerProxy gamePlayerProxy=new GamePlayerProxy(gamePlayer);
		System.out.println("代打玩家开始代打-------------");
		gamePlayerProxy.login();
		gamePlayerProxy.killBoss();
		gamePlayerProxy.upRank();
		gamePlayerProxy.killBoss();
		gamePlayerProxy.upRank();
		System.out.println("代打玩家结束代打-------------");
	}

}
//定义一个玩家接口(抽象主题角色)
interface IGamePlayer{
	//登陆方法
	public abstract void login();
	//打怪
	public abstract void killBoss();
	//升级
	public abstract void upRank();
}
//玩家(具体主题角色)
class GamePlayer implements IGamePlayer{
	String userName=null;
	public GamePlayer(String userName) {
		this.userName=userName;
	}
	@Override
	public void login() {
		System.out.println("玩家"+userName+"登陆成功");
	}

	@Override
	public void killBoss() {
		System.out.println("玩家"+userName+"开始杀怪");
	}

	@Override
	public void upRank() {
		System.out.println("玩家"+userName+"升级");
	}
	
}
//代打(理)玩家(代理主题角色)
class GamePlayerProxy implements IGamePlayer{
	//代理的玩家
	private IGamePlayer gamePlayer=null;
	public GamePlayerProxy(IGamePlayer gamePlayer) {
		this.gamePlayer=gamePlayer;
	}
	@Override
	public void login() {
		System.out.println("代打玩家开始登陆玩家账号----");
		gamePlayer.login();
	}

	@Override
	public void killBoss() {
		System.out.println("代打玩家开始帮玩家代打Boss----");
		gamePlayer.killBoss();
	}

	@Override
	public void upRank() {
		System.out.println("代打玩家帮玩家升级----");
		gamePlayer.upRank();
	}
	
}
普通代理

/*
 * 代理模式-普通代理
 * 
 */
public class MyMain2 {
	public static void main(String[] args) {
		IGamePlayerA proxy=new GamePlayerProxyA("老八");
		proxy.login();
		proxy.killBoss();
		proxy.upRank();
	}
}
interface IGamePlayerA{
	abstract public void login();
	abstract public void killBoss();
	abstract public void upRank();
}
class GamePlayerA implements IGamePlayerA{
	private String name=null;
	public GamePlayerA(IGamePlayerA gamePlayer,String name) {
		if(gamePlayer==null)
			System.out.println("不能创建真实角色");
		else {
			this.name=name;
		}
	}
	@Override
	public void login() {
		System.out.println("玩家"+name+"登陆成功");
	}
	@Override
	public void killBoss() {
		System.out.println(name+"在打boss");
	}
	@Override
	public void upRank() {
		System.out.println(name+"升级了");
	}
	
}
class GamePlayerProxyA implements IGamePlayerA{
	private IGamePlayerA gamePlayer=null;
	public GamePlayerProxyA(String name) {
		gamePlayer=new GamePlayerA(this, name);
	}
	@Override
	public void login() {
		gamePlayer.login();
	}
	@Override
	public void killBoss() {
		gamePlayer.killBoss();
	}
	@Override
	public void upRank() {
		gamePlayer.upRank();
	}
	
}


/*
 * 代理模式-强制代理
 */
public class MyMain3 {

	public static void main(String[] args) {
		IGamePlayerB player=new GamePlayerB("老九");
		player.login();
		player.killBoss();
		player.upRank();
		IGamePlayerB proxy=player.getProxy();
		proxy.login();
		proxy.killBoss();
		proxy.upRank();

	}

}

interface IGamePlayerB {
	abstract public void login();

	abstract public void killBoss();

	abstract public void upRank();

	abstract public IGamePlayerB getProxy();
}

class GamePlayerB implements IGamePlayerB {
	private String name = null;
	private IGamePlayerB proxy = null;

	public GamePlayerB(String name) {
			this.name = name;
	}

	@Override
	public void login() {
		if(isProxy())
		System.out.println("玩家"+name+"登陆成功");
		else {
			System.out.println("请使用代理访问");
		}
	}

	@Override
	public void killBoss() {
		if(isProxy())
			System.out.println(name + "在打boss");
			else {
				System.out.println("请使用代理访问");
			}
		
	}

	@Override
	public void upRank() {
		if(isProxy())
			System.out.println(name + "升级了");
			else {
				System.out.println("请使用代理访问");
			}

	}

	@Override
	public IGamePlayerB getProxy() {
		this.proxy = new GamePlayerProxyB(this);
		return proxy;
	}
	private boolean isProxy() {
		if (this.proxy == null) {
			return false;
		} else {
			return true;
		}
	}
}

class GamePlayerProxyB implements IGamePlayerB {
	private IGamePlayerB gamePlayer = null;

	public GamePlayerProxyB(IGamePlayerB gamePlayerB) {
		gamePlayer = gamePlayerB;
	}

	@Override
	public void login() {
		gamePlayer.login();
	}

	@Override
	public void killBoss() {
		gamePlayer.killBoss();
	}

	@Override
	public void upRank() {
		gamePlayer.upRank();
	}

	@Override
	public IGamePlayerB getProxy() {
		return this;
	}

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值