代理模式定义:为其他对象提供一种代理,以控制对这个对象的访问
代理模式ex:
以上为该文章例子的简单代理模式的类图
接口:IGamePlayer
实现类:GamePlayer
实现类的代理类:GamePlayerProxy
实现类和代理类实现相同的接口
/**
* 打游戏的接口
*/
public interface IGamePlayer {
//登录
public void login(String name,String pwd);
//打怪
public void killBoss();
//升级
public void upgrade();
}
/**
* 打游戏的实现类
*/
public class GamePlayer implements IGamePlayer {
public String name;
public GamePlayer(String name) {
this.name = name;
}
@Override
public void login(String name, String pwd) {
LogUtil.d(name+"登录成功");
}
@Override
public void killBoss() {
LogUtil.d(name+"在打怪");
}
@Override
public void upgrade() {
LogUtil.d(name+"升级成功");
}
}
/**
* 实现类的代理类
* 将被代理的对象通过构造函数传递进来,其实被代理的对象还是具体逻辑执行者,代理类是对其又做了一次封装
*/
public class GameProxy implements IGamePlayer {
//被代理对象
private IGamePlayer gamePlayer;
//通过构造函数传递对谁进行代理
public GameProxy(IGamePlayer gamePlayer) {
this.gamePlayer = gamePlayer;
}
//代理登录
@Override
public void login(String name, String pwd) {
gamePlayer.login(name,pwd);
}
//代理打怪
@Override
public void killBoss() {
gamePlayer.killBoss();
}
//代理升级
@Override
public void upgrade() {
gamePlayer.upgrade();
}
}
/**
* 场景类
*/
public class GameClient extends Activity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
IGamePlayer gamePlayer = new GamePlayer("shj");
IGamePlayer proxy = new GameProxy(gamePlayer);
proxy.login("shj","eee");
proxy.killBoss();
proxy.upgrade();
}
}