Java设计模式-代理模式

简介

代理模式是一种结构型设计模式,它可以让我们通过一个代理对象来访问一个真实的目标对象,从而实现对目标对象的功能扩展或保护。代理模式的主要角色有三个:

  • 抽象主题(Subject):定义了真实主题和代理主题的公共接口,使得在任何使用真实主题的地方都可以使用代理主题。
  • 真实主题(RealSubject):实现了抽象主题的接口,定义了真实的业务逻辑,是代理主题所代表的真实对象。
  • 代理主题(Proxy):也实现了抽象主题的接口,但是在调用真实主题的方法之前或之后,可以执行一些额外的操作,从而对真实主题进行控制或增强。

代理模式可以帮助我们解决以下几种问题:

  • 当我们无法或不想直接访问一个对象时,可以通过一个代理对象来间接访问,例如远程代理、虚拟代理等。
  • 当我们想要给一个对象提供额外的功能时,可以通过一个代理对象来实现,而不需要修改原有的对象,例如缓存代理、日志代理等。
  • 当我们想要给一个对象增加一些访问控制或安全保护时,可以通过一个代理对象来实现,例如防火墙代理、权限代理等。

实现

根据代理模式的定义,我们可以用以下的类图来表示它的结构:

其中,Client是客户端类,它需要使用Subject接口提供的方法。Proxy是代理类,它持有一个RealSubject的引用,并且实现了Subject接口。RealSubject是真实类,它也实现了Subject接口,并且定义了具体的业务逻辑。

代理模式有多种类型,例如静态代理、动态代理等,代理模式也有自己的优缺点,使用时需要根据具体的场景和需求来选择合适的类型和方式。

静态代理实现

下面我们用Java代码来实现一个静态代理的例子:

// 抽象主题接口
public interface Subject {
// 定义一个抽象方法
void request();
}

// 真实主题类
public class RealSubject implements Subject {
// 实现抽象方法
@Override
public void request() {
// 真实的业务逻辑
System.out.println("RealSubject is doing something...");
}
}

// 代理主题类
public class Proxy implements Subject {
// 持有一个真实主题的引用
private RealSubject realSubject;

// 构造方法,传入一个真实主题对象
public Proxy(RealSubject realSubject) {
this.realSubject = realSubject;
}

// 实现抽象方法
@Override
public void request() {
// 在调用真实主题之前,可以执行一些额外操作
System.out.println("Proxy is doing something before...");
// 调用真实主题的方法
realSubject.request();
// 在调用真实主题之后,可以执行一些额外操作
System.out.println("Proxy is doing something after...");
}
}

// 客户端类
public class Client {
public static void main(String[] args) {
// 创建一个真实主题对象
RealSubject realSubject = new RealSubject();
// 创建一个代理对象,并传入真实主题对象
Proxy proxy = new Proxy(realSubject);
// 使用代理对象来调用抽象方法
proxy.request();
}
}
运行结果如下
Proxy is doing something before...
RealSubject is doing something...
Proxy is doing something after...

<< · Back Index ·>>

发表回复

相关推荐

干吃面大合集

1.统一小当家干脆面48包混合口味 2.老北京方便面(36袋x65克) 3.幸运 方便面 红烧排骨面 干吃面 60g*30袋 整箱装节日 4.统一 ...

· 4分钟前

備孕科普/科學備孕之(男性篇)

接著上一期講完女性篇:科學備孕,這些你做到瞭嗎? 今天我們繼續著重對男性朋友們說如何科學備孕瞭!(一)自我認知每個男性...

· 5分钟前

夏金桂與薛蟠的結局,窮的頭油都打不起,二十八回已有暗示

《紅樓夢》八十回結束前最讓人討厭的兩個人,一個是孫紹祖,一個是夏金桂。孫紹祖暗線出場惡貫滿盈,夏金桂明線出場,所作所...

· 6分钟前

大拍档剪辑助手,按字幕分割短视频素材

我们批量剪辑短视频会有素材片段的分割,大拍档剪辑助手就比较适合,可以按字幕分割短视频素材。

· 13分钟前

5款胶原蛋白酸奶深度测评:爱美的你掉进陷阱了吗?

文 | 乳品之家液奶测评研究中心 近几年,胶原蛋白、玻尿酸行业发展迅速,就在去年年初,胶原蛋白允许被添加到食品中,于是市 ...

· 17分钟前