代理模式

2016-08-09  本文已影响0人  tdeblog

1.普通代理#

1.1定义##

普通代理要求客户端只能访问代理角色,不能访问真实角色。

1.2实现##

1.2.1抽象角色类###

public interface IGamePlayer {    
  public void request();
}

1.2.2代理角色类###

public class GamePlayerProxy implements IGamePlayer{
    private IGamePlayer gamePlayer = null;
    public GamePlayerProxy(String _name) {
        try {
            gamePlayer = new GamePlayer(this, _name);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    @Override
    public void request() {
        this.before();
        this.gamePlayer.request();
        this.after();
    }

    private void before() {
        //代理动作前处理
    }

    private void after() {
        //代理动作后处理
    }
}

1.2.3真实角色类###

public class GamePlayer implements IGamePlayer{
    private String name = "";
    public GamePlayer(IGamePlayer _gamePlayer, String _name) throws Exception{
        if (_gamePlayer == null){
            throw new Exception("无法生成真实角色!");
            //此处添加一些创建的限制条件
        }else{
            this.name = _name;
        }
    }
    @Override
    public void request() {
        System.out.println("处理具体的事物");
    }
}

2.强制代理#

2.1定义##

强制代理要求必须通过真实角色查找到代理角色,否则不能访问。代理角色由真实角色自己管理,不需要知道代理角色,代理角色还可以有自己的代理。

2.2实现##

2.2.1抽象代理类###

public interface IGamePlayer {    
  public void request();    
  public IGamePlayer getProxy();
}

2.2.2具体代理类###

public class GamePlayerProxy implements IGamePlayer{
    private IGamePlayer gamePlayer = null;
    private String name = "";
    public GamePlayerProxy(IGamePlayer _gamePlayer, String _name) {
        this.gamePlayer = _gamePlayer;
        this.name = _name;
    }

    @Override
    public void request() {
        this.before();
        this.gamePlayer.request();
        this.after();
    }

    //代理类还可以有自己的代理,此处没有所以返回自己
    @Override
    public IGamePlayer getProxy() {
        return this;
    }

    private void before() {
        //代理动作前处理
    }

    private void after() {
        //代理动作后处理
    }

}

2.2.3真实角色类###

public class GamePlayer implements IGamePlayer{
    private String name = "";
    private IGamePlayer proxy = null;
    public GamePlayer(String _name) {
        this.name = name;
    }
    @Override
    public void request() {
        if (this.proxy == null){
            System.out.println("请获取代理角色!");
        }else {
            System.out.println("处理具体的事物");
        }
    }

    @Override
    public IGamePlayer getProxy() {
        this.proxy = new GamePlayerProxy(this, name);
        return proxy;
    }
}

3.动态代理模式#

未完待续。。。

上一篇下一篇

猜你喜欢

热点阅读