代理模式-《Head First 设计模式》

本文通过一个游戏代练的例子,深入浅出地介绍了代理模式的概念、结构和应用实例。同时对比了代理模式与装饰者模式的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

总结归纳自《Head First 设计模式》,实例部分是通过自己的理解使用最简单的方法实现的代理模式。

1-代理

远程对象的代理,就是假装自己就是远程对象,完成本地对象请求的功能。内部是将请求交给远程对象去完成,并等待获得返回值。

  • 辅助对象:代理客户,作为中间桥梁。

2-定义

代理模式为另一个对象提供一个替身用于控制对这个对象的访问。

使用代理模式创建代表,让代表对象控制某对象的访问,被代理的对象可以是远程对象,创建开销大的对象或者需要安全控制的对象。

3-结构

  1. Subject接口:该接口允许任何客户都可以像处理RealSubject对象一样去处理Proxy对象。
  2. Proxy(实现Subject):持有RealSubject对象的引用,需要时将请求转发给RealSubject
  3. RealSubject(实现Subject):真正对象,该对象的访问会被Proxy对象控制。

4-实例

玩家想玩游戏,但是不想升级,却想让自己等级很高可以吹牛,这个时候玩家就会去找代练帮自己玩,这里代练就是代理模式中的Proxy。实现的代码如下:

1-Play接口:subject接口

public interface Play {
    public void play(); //玩
}

2-Proxy代理:代练

public class PlayerProxy implements Play{
    Player player;
    public PlayerProxy(String name) {
        player = new Player(name);
    }
    @Override
    public void play() {
        player.play();
    }
}

3-RealSubject:玩家

public class Player implements Play{
    private String name;
    public Player(String name) {
        this.name = name;
    }
    @Override
    public void play() {
        System.out.println(name + " is playing game!");
    }
}

4-测试:开始代练

这里还是用户“feather”开始玩,然而本质却是通过Proxy代理去完成的。

PlayerProxy playerProxy = new PlayerProxy("feather");
playerProxy.play();

结果
feather is playing game!

5-学习链接

书中用RMI方法实现代理,将代理模式复杂化了(用不用RMI效果没区别,实现却很复杂),这里有一个代理模式的笔记链接,讲的还是很清爽的:转载:设计模式之代理模式

6-RMI/虚拟代理/动态代理

  • RMI是什么?

    • java RMI框架 远程方法调用。
    • RMI提供了客户辅助对象和服务辅助对象。RMI不需要写任何网络和IO代码,客户Client调用远程方法,就和调用在本地JVM上的一般方法调用一样。
    • RMI将客户辅助对象称为stub桩,服务辅助对象称为skeleton骨架。
  • Java在java.lang.reflect包中提供代理支持。可以动态的创建代理类。这就是动态代理。更多代理模式查阅资料学习吧。

7-代理模式和装饰者模式的区别

代理模式:包装另一个对象,并控制对它的访问。
装饰者模式:包装另一个对象,并添加额外的行为。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猎羽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值