定义 proxy
为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。
- 结构型模式
应用场景
- 不直接操作对象的情况下,对此对象进行访问(Windows 里面的快捷方式)
- 在我们确实需要这个对象时才对它进行创建和初始化
- 控制访问
- 改变其内部功能
成员
- 抽象角色:通过接口或抽象类声明真实角色实现的业务方法。
- 代理角色:实现抽象角色,是真实角色的代理,通过真实角色的业务逻辑方法来实现抽象方法,并可以附加自己的操作。
- 真实角色:实现抽象角色,定义真实角色所要实现的业务逻辑,供代理角色调用
- client(客户端):初始化抽象
结构图
实现与被代理类组合
示例代码
interface 卖商品{
卖();
}
class 工厂 implements 卖商品{
卖(){
print 生成商品,卖产品
}
}
class 专卖店 implements 卖商品{
工厂 工厂;
卖(){
工厂.卖();
}
}
class main{
卖商品 卖商品 = new 专卖店();
卖商品.卖();
}
思考
- 远程代理
- 客户端程序可以访问在远程主机上的对象
- 虚拟代理
- 对于一些占用系统资源较多或者加载时间较长的对象,可以给这些对象提供一个虚拟代理
联系
- 和适配器模式的区别
- 适配器模式为了改变接口
- 不能改变所代理类的接口
- 和装饰器模式的区别
- 装饰器模式为了增加功能
- 代理模式为了控制