代理模式(Proxy Pattern)
1.策略模式(Strategy Pattern)2.桥接模式(Bridge Pattern)
3.代理模式(Proxy Pattern)
4.中介者模式(Mediator Pattern)5.过滤器模式(Filter Pattern)6.适配器模式(Adapter Pattern)7.责任链模式(Chain Of Responsibility Pattern)8.装饰器模式(Decorator Pattern)9.建造者模式(Builder Pattern)10.观察者模式(Observer Pattern)11.工厂模式(Factory Pattern)12.单例模式(Singleton Pattern)13.组合模式(Composite Pattern)14.模板模式(Template Pattern)15.原型模式(Prototype Pattern)16.外观模式(Facade Pattern)17.享元模式(Flyweight Pattern)18.命令模式(Command Pattern)19.解释器模式(Interpreter Pattern)20.迭代器模式(Iterator Pattern)代理模式
一、什么是代理模式
代理模式(Proxy Pattern),指调用者通过调用代理对象来访问真实对象,在真实对象访问之前或者之后加入对应的逻辑,或者根据其他规则控制是否使用真实对象。代理对象需要和真实对象建立代理关系。
二、代理模式的步骤
- 代理对象和真实对象建立代理关系
- 实现代理对象的代理逻辑方法
三、代理模式的优缺点
1、优点
- 职责清晰。
- 高扩展性。
- 智能化。
2、缺点
- 由于在客户端和真实主题之间增加了代理对象,因此有些类型的代理模式可能会造成请求的处理速度变慢。
- 实现代理模式需要额外的工作,有些代理模式的实现非常复杂。
四、代码实现

1、代理模式中的角色
- 抽象对象角色:声明了目标类及代理类对象的共同接口,这样在任何可以使用目标对象的地方都可以使用代理对象。
- 目标对象角色:定义了代理对象所代表的目标对象。
- 代理对象角色:代理对象内部含有目标对象的引用,从而可以在任何时候操作目标对象;代理对象和目标对象具有统一的接口,以便可以再任何时候替代目标对象。代理对象通常在客户端调用传递给目标对象之前或者之后,执行某些操作,而非单纯的将调用传递给目标对象。
2、具体代码实现
/**
* 抽象对象
*
* @author zt1994 2019/3/2 16:25
*/
public interface SayHello {
void sayHelloWorld();
}
/**
* 真实对象
*
* @author zt1994 2019/3/2 16:27
*/
public class SayHelloImpl implements SayHello {
@Override
public void sayHelloWorld() {
System.out.println("Hello World!");
}
}
/**
* 代理对象
*
* @author zt1994 2019/3/2 16:28
*/
public class SayHelloProxy implements SayHello {
private SayHello sayHello;
public SayHelloProxy(SayHello sayHello) {
this.sayHello = sayHello;
}
@Override
public void sayHelloWorld() {
System.out.println("调用sayHello之前的处理");
sayHello.sayHelloWorld();
System.out.println("调用sayHello之后的处理");
}
}
/**
* 测试静态代理
*
* @author zt1994 2019/3/2 16:30
*/
public class staticProxyTest {
/**
* 测试静态代理
*/
@Test
public void testStaticProxy() {
SayHelloImpl sayHello = new SayHelloImpl();
sayHello.sayHelloWorld();
SayHelloProxy sayHelloProxy = new SayHelloProxy(sayHello);
sayHelloProxy.sayHelloWorld();
}
}
测试结果:
Hello World!
调用sayHello之前的处理
Hello World!
调用sayHello之后的处理
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· AI与.NET技术实操系列(六):基于图像分类模型对图像进行分类
2018-03-02 Java基础(十二)IO输入输出