设计模式 结构型设计模式之代理模式

1 基础知识

1.1 标准定义

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

1.2 分析和说明

代理模式属于结构型设计模式。代理就是一个人或一个机构代表另一个人或者机构采取行动。某些情况下,客户不能或者不能够直接引用一个对象,代理对象可以在客户和目标对象直接起到中介的作用。客户端分辨不出代理主题对象与真实主题对象。代理模式可以并不知道真正的被代理对象,而仅仅持有一个被代理对象的接口,这时候代理对象不能够创建被代理对象,被代理对象必须有系统的其他角色代为创建并传入。

代理模式其角色包括抽象主题(subject)角色、代理主题(Proxy)角色和真实主题(Real Subject)角色.

抽象主题(Subject)角色:声明了真实主题和代理主题的共同接口,这样一来在任何可以使用真实主题的地方都可以使用代理主题。该类的实现中保存一个引用使得代理可以访问实体。提供一个与实体接口相同的代理接口,这样代理就可以用来替代实体来控制对实体的存取,并可能负责创建和删除实体。

代理主题(Proxy)角色:代理主题角色内部含有对真实主题的引用,从而可以在任何时候操作真实主题对象;代理主题角色提供一个与真实主题角色相同的接口,以便可以在任何时候都可以替代真实主体;控制对真实主题的引用,负责在需要的时候创建真实主题对象(和删除真实主体对象);代理角色通常在将客户端调用传递给真实的主题之前或之后,都要执行某个操作,而不是单纯地将调用传递 给真实主题的对象。

真实主题(Real Subject)角色:定义了代理角色所代表的真实对象,包含实体具体实现代码。


2 应用场景举例

比如公司为了拓展业务,在A省设置办事处,所有在A省的用户请求,都通过该办事处转达到公司, 其中办事处就是一个代理机构。

可以把AbstractOrganization类理解为抽象主题角色。Agency类是代理主题角色。Corporation类是真实主题角色。其结构类图如下:


代理模式实现顺序描述:(1)创建一个代理Proxy对象  (2)创建一个Corporation对象 (3)客户向Proxy对象发出Request请求  (4)Proxy对象向Corporation对象发出request请求 (5)Corporation对象向Proxy对象返回请求的答复  (6)Proxy对象向客户返回请求的答复。


3 Java的程序实现代码

Java程序实现主要包括AbstractOrganization抽象类文件、Agency类文件和Corporation类文件等3个文件

AbstractOrganization类程序代码为:

public abstract class AbstractOriganization {
public void request(){};
}


Agency类代码为:

public class Agency extends AbstractOriganization{
private Corporation corporation;
public void request(){
if(corporation == null){
corporation = new Corporation();

}

corporation.request();
}
}


Corporation类代码为:

public class Corporation extends AbstractOriganization{
public void request(){
System.out.println("这是公司的答复。");
}
}


代理模式测试代码为:

public class Client {
public static void main(String[] args){
Agency agency = new Agency();
agency.request();
}
}







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值