代理模式(Proxy Pattern)
程序员文章站
2022-06-11 08:29:38
代理模式 一、什么是代理模式 代理模式(Proxy Pattern),指调用者通过调用代理对象来访问真实对象,在真实对象访问之前或者之后加入对应的逻辑,或者根据其他规则控制是否使用真实对象。代理对象需要和真实对象建立代理关系。 二、代理模式的步骤 1. 代理对象和真实对象建立 ......
代理模式
一、什么是代理模式
代理模式(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之后的处理
上一篇: JS和JQUERY获取页面大小,滚动条位置,元素位置(示例代码)
下一篇: JS 创建元素的三种方法