代理模式:为其他对象提供一种代理以控制对这个对象的访问。
优点:
1.职责清晰
2.高扩展性
3.智能化
使用场景:避免中间过程,减轻负担。典型动态代理场景:Spring AOP。
优点:
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");
}
}