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

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

  • 1-代理
  • 2-定义
  • 3-结构
  • 4-实例
    • 1-Play接口subject接口
    • 2-Proxy代理代练
    • 3-RealSubject玩家
    • 4-测试开始代练
  • 5-学习链接
  • 6-RMI虚拟代理动态代理
  • 7-代理模式和装饰者模式的区别

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-代理模式和装饰者模式的区别

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

你可能感兴趣的:(设计模式)