【设计模式】12.代理模式

代理模式:为其他对象提供一种代理以控制对这个对象的访问。
优点:
1.职责清晰
2.高扩展性
3.智能化
使用场景:避免中间过程,减轻负担。典型动态代理场景:Spring AOP。
package com.syc.designpatterns.chapter12;

public interface IGamePlayer {

	// 登录游戏
	public void login(String user,String password);
	// 杀怪,网络游戏的主要特色
	public void killBoss();
	// 升级
	public void upgrade();
}

package com.syc.designpatterns.chapter12;

public class GamePlayer implements IGamePlayer{

	private String name = "";
	// 通过构造函数传递名称
	public GamePlayer(String _name){
		this.name = _name;
	}
	
	// 打怪,最期望的就是杀老怪
	public void killBoss() {
		System.out.println(this.name + "在打怪!");
	}

	// 进游戏之前你肯定要登录吧,这是一个必要条件
	public void login(String user, String password) {
		System.out.println("登录名为:" + user + "的用户" + this.name + "登录成功!");
		
	}

	// 升级,升级又很多方法,花钱买是一种,做任务也是一种
	public void upgrade() {
		System.out.println(this.name + " 又升了一级!");
	}

}

package com.syc.designpatterns.chapter12;

public class GamePlayerProxy implements IGamePlayer {

	private IGamePlayer gamePlayer = null;
	// 通过构造函数传递要对谁进行代理
	public GamePlayerProxy(IGamePlayer _gamePlayer){
		this.gamePlayer = _gamePlayer;
	}
	// 代练杀怪
	public void killBoss() {
		this.gamePlayer.killBoss();
	}
	// 代练登录
	public void login(String user, String password) {
		this.gamePlayer.login(user, password);
	}
	// 代练升级
	public void upgrade() {
		this.gamePlayer.upgrade();
	}
}

package com.syc.designpatterns.chapter12;

public class Client {

	public static void main(String[] args){
		// 定义一个痴迷的玩家
		IGamePlayer player = new GamePlayer("张三");
		// 然后再定义一个代练者
		IGamePlayer proxy = new GamePlayerProxy(player);
		// 开始打游戏,记下时间戳
		System.out.println("开始时间是:2009-8-25 10:45");
		proxy.login("zhangsan", "password");
		// 开始杀怪
		proxy.killBoss();
		// 升级
		proxy.upgrade();
		// 记录结束游戏时间
		System.out.println("结束时间是:2009-8-26 03:40");
	}
}

你可能感兴趣的:(设计模式)