设计模式之代理模式

1.定义

代理模式:为其他对象提供一种代理以控制对这个对象的访问。

2.UML图

Subject类定义RealSubject和Proxy的公共行为,所以RealSubject出现的地方都可以由Proxy进行替代。在Proxy内部实际上是通过RealSubject对象调用RealSubject的相关方法实现代理操作的。

举个栗子。打游戏经常有找代理刷级的,刷级时需要用钱买装备,这钱谁出?当然是你出,代理用你的钱去买装备升级更快,要是代理自掏腰包,恐怕赚的代理费还不够装备钱的。所以是你先花钱买了点卡,然后你把点卡的充值号码告诉代理,代理就把钱充到游戏账号上了,有钱后代理就可以肆意买装备刷级了。来,照着这个例子画个UML图,如下:

3.Code

Player.java

interface Player{
  void recharge();
}

XiaoMing.java

class XiaoMing implements Player{
    private GameClient game;
    public XiaoMing(GameClient game){
        this.game = game;
    }
    public void recharge(){
        System.out.println("XiaoMing买了"+game.getName()+"上的点卡");
    }
}

GameProxy.java

class GameProxy implements Player{

    private XiaoMing guest;

    public GameProxy(GameClient client){
         guest = new XiaoMing(client);
    }

    public void recharge(){
         if(guest!=null){
             guest.recharge();//花钱的事找顾客
         }
    }
}

GameClient.java

 class Gamelient{
    private String name;
    public void setName(String name){
        this.name = name;
    }
    public String getName(){
        return  name;
    }
 }

Client.java

public class Client{
    public static void main(String[] args){
        GameClient game = new GameClient();
        game.setName("梦幻西游");

        GameProxy proxy = new GameProxy(game);
        proxy.recharge();

    }
}

输出

小明买了梦幻西游的点卡

4.总结

最后没有看见小明的影子,只有代理在跟游戏进行交互,但是打印输出的是XiaoMing的recharge方法。由此可见代理模式的好处。GameClient不知道小明的存在,只和代理进行交互,由代理全权负责小明的游戏账号,但是账号的密码,账号上的钱等等其实都是小明的,代理进行充值等操作都是需要小明本人进行操作。代理只是小明找来刷级的,没有小明就不会出现一个代理操作小明的账号,但是一旦小明找了代理刷级,代理就可以代替小明登录游戏账号,GameClient也只认识代理不认识小明。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值