【设计模式】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");
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值