定义 proxy

为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。

  • 结构型模式

应用场景

  • 不直接操作对象的情况下,对此对象进行访问(Windows 里面的快捷方式)
  • 在我们确实需要这个对象时才对它进行创建和初始化
  • 控制访问
  • 改变其内部功能

成员

  • 抽象角色:通过接口或抽象类声明真实角色实现的业务方法。
  • 代理角色:实现抽象角色,是真实角色的代理,通过真实角色的业务逻辑方法来实现抽象方法,并可以附加自己的操作。
  • 真实角色:实现抽象角色,定义真实角色所要实现的业务逻辑,供代理角色调用
  • client(客户端):初始化抽象

结构图

实现与被代理类组合
代理模式

示例代码

interface 卖商品{
    卖();
}

class 工厂 implements 卖商品{
    卖(){
        print 生成商品,卖产品
    }
}

class 专卖店 implements 卖商品{
    工厂 工厂;
    卖(){
        工厂.卖();
    }
}

class main{
    卖商品 卖商品 = new 专卖店();
    卖商品.卖();
}

思考

  • 远程代理
    • 客户端程序可以访问在远程主机上的对象
  • 虚拟代理
    • 对于一些占用系统资源较多或者加载时间较长的对象,可以给这些对象提供一个虚拟代理

联系

  • 和适配器模式的区别
    • 适配器模式为了改变接口
    • 不能改变所代理类的接口
  • 和装饰器模式的区别
    • 装饰器模式为了增加功能
    • 代理模式为了控制