《设计模式之禅》-普通代理

网络上代理服务器分为透明代理普通代理

透明代理

用户不用设置代理服务器地址,就可以直接访问,也就是说代理服务器对用户来说是透明的,不用知道它的存在

普通代理

需要用户自己设置代理服务器的IP地址,用户必须知道代理的存在。

设计模式中普通代理和强制代理也是一种类似的结构,普通代理就是我们要知道代理的存在,也是得知道proxy类的存在,才能访问。而强制代理则是调用者直接调用真实的角色。而不用关心代理是否存在,其代理的产生是由真实角色决定的

普通代理其实就是 客户端只能直接访问代理类,而不能访问真实角色。(也就是你不能自己玩游戏了,只能由代练来进行)

示例代码如下:

//抽象主题类
public interface IGamePlayer {
    //登录
    public void login(String name, String password);
    //杀怪
    public void killBoss();
    //升级
    public void upgrade();
}

 

//真实主题类 被代理者,实际操作类
public class GamePlayer implements IGamePlayer{
    private String name = "";
    //构造函数限制谁能创建对象,并同时传递姓名 
    public GamePlayer(IGamePlayer _player, String _name) throws Exception {
        if (_player == null) {
            throw new Exception("不能创建真实角色");
        }else {
            this.name = _name;
        }

    }
    @Override
    public void login(String name, String password) {
        System.out.println("登录名为:"+this.name);
    }

    @Override
    public void killBoss() {
        System.out.println(this.name+"在杀怪");
    }

    @Override
    public void upgrade() {
        System.out.println(this.name+"又升级了");
    }
}
//代理类
public class GamePlayProxy implements IGamePlayer{
    private IGamePlayer player = null;

    //通过构造函数传递要对谁进行代练
    public GamePlayProxy(String name){
        try{
            player = new GamePlayer(this,"张三");
        }catch (Exception e){

        }
    }
    //代练登录
    @Override
    public void login(String name, String password) {
        this.player.login(name,password);
    }
    //代练杀怪
    @Override
    public void killBoss() {
        this.player.killBoss();
    }
    //代练
    @Override
    public void upgrade() {
        this.player.upgrade();
    }
}

 

public class main {
    public static void main(String[] args) {
        //定义一个代练者
        IGamePlayer proxy = new GamePlayProxy("张三");
        //代练开始打游戏
        System.out.println("----代练开始打游戏----");
        proxy.login("张三","passwd");
        proxy.killBoss();
        proxy.upgrade();
    }
}

 

该模式下,调用者只知道代理而不用知道真实角色是谁,屏蔽了真实角色的变更对高层模块的影响,真实的主题角色想怎么修改就怎么修改,对高层次的模块没有任何影响,只要实现了接口所对应的方法,该模式非常适合对扩展性要求较高的场合。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值