代理模式是常用的Java 设计模式,它的特征是代理类与委托类有同样的接口,如图1所示。代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类,以及事后处理消息等。代理类与委托类之间通常会存在关联关系,一个代理类的对象与一个委托类的对象关联,代理类的对象本身并不真正实现服务,而是通过调用委托类的对象的相关方法,来提供特定的服务。
图1:Proxy模式
按照代理类的创建时期,代理类可分为两种。
- 静态代理类:由程序员创建或由特定工具自动生成源代码,再对其编译。在程序运行前,代理类的.class文件就已经存在了。
- 动态代理类:在程序运行时,运用反射机制动态创建而成。
静态代理类的实现:
1. 定义一个IService接口
package cn.lettoo.proxy;
public interface IService {
void execute();
}
2. 具体的实现类:
package cn.lettoo.proxy;
public class PrintService implements IService {
public void execute() {
System.out.println("The Print Service works.");
}
}
3. 代理类:
package cn.lettoo.proxy;
public class PrintServiceProxy implements IService {
IService printSerivce;
public PrintServiceProxy(IService service) {
this.printSerivce = service;
}
public void execute() {
this.beforePrint();
this.printSerivce.execute();
this.afterPrint();
}
private void beforePrint() {
System.out.println("Before print.");
}
private void afterPrint() {
System.out.println("After print.");
}
}
代理类的execute()方法只是调用了被代理的Service的execute方法,被代理的Service通过构造函数或者set的方式被注入到代理对象中。同时,代理对象也有一些自己的代理方法,如本例中在被代理类的execute()方法调用前后加上自己的方法。
4. 客户调用代码:
package cn.lettoo.proxy;
public class Client {
public static void main(String[] args) {
IService service = new PrintService();
IService proxy = new PrintServiceProxy(service);
proxy.execute();
}
}
执行结果
Before print.
The Print Service works.
After print.
分享到:
相关推荐
Java中的代理模式--静态代理和动态代理 Java中的代理模式--静态代理和动态代理
动态代理的代码例子 里面敲好了注释 搭配文章观看更好
自己编写的代理设计模式,示例中的代码绝对没有使用伪代码,是开发的项目真实案例,简单易懂
- 代理模式 - 静态代理与动态代理 - 常见的动态代理实现 - JDK Proxy - CGLIB - JDK Proxy 和 CGLIB 的对比 - 动态代理的实际应用 - Spring AOP 说在前面:今天我们来聊一聊 Java 中的代理,先来聊聊故事...
Java编程模式-代理模式。介绍了静态代理模式和动态代理模式
Java设计模式——代理设计模式(静态代理和动态代理) 各种情况例子源码
设计模式之代理模式_静态代理的一个java实现的demo。主类在Client中。仅代码实现,可供初学者参考使用
NULL 博文链接:https://skyuck.iteye.com/blog/524561
│ 北京动力节点SSH前言-007-代理模式-静态代理与动态代理.mp4 │ 北京动力节点SSH前言-008-代理模式-静态代理测试环境的搭建.mp4 │ 北京动力节点SSH前言-009-代理模式-解决快捷键冲突问题.mp4 │ 北京动力节点SSH...
Java各种代理模式以及AOP的实现代码 : 1.AspectJ - 静态代理 2. 动态代理 (1)JDK动态代理 (2)CGlib代理
Java 代理模式: 详见:http://blog.csdn.net/q610098308/article/details/74144046
//代理模式内部引用了真实角色 public void requst() { this.preRequest(); //在真实角色操作之前所附加的操作 if(null == realsubject) { realsubject = new ReallSubject(); } realsubject.requst(); // ...
NULL 博文链接:https://871656094.iteye.com/blog/2355335
java 代理模式实现代码及设计详解:动态代理模式、静态代理模式
静态代理模式静态代理模式
静态代理总结: 优点:可以做到在符合开闭原则的情况下对目标对象进行功能扩展。 缺点:我们得为每一个服务都得创建代理类,工作量太大,不易管理。同时接口一旦发生改变,代理类也得相应修改。
Java多线程 基础学习笔记 / 学习静态代理模式-附件资源
* 代理模式 * 在开发者的角度来看,创建一个代理对象,提供给用户使用,避免用户直接访问真正的对象 * 在用户角度来看,就是普通的类方法调用 * * 作用 * 1.保护被代理对象 * 2.增强被代理对象 * 3.完全...