Java设计模式之静态代理模式实例分析
作者:aronykl 时间:2021-05-30 17:44:19
本文实例讲述了Java设计模式之静态代理模式。分享给大家供大家参考,具体如下:
代理模式,可以通过代理可以在原来的基础上附加一些其他的操作。静态代理模式相对比较简单无需再程序运行时动态的进行代理。
静态代理模式的角色:
① 抽象角色:真实对象和代理对象的共同接口。其中声明真实对象和代理对象需要做的事。
② 真实角色:实现抽象角色,定义真实角色所要实现的业务逻辑,供代理角色调用。
③ 代理角色:实现抽象角色,是真实角色的代理,通过真实角色的业务逻辑方法来实现抽象方法,并可以附加自己的操作。
下面提供一个简单的静待代理的示例代码:
1. 抽象角色:真实对象和代理对象的共同接口。其中声明真实对象和代理对象需要做的事。
package com.tydic.proxy;
/**
* 真实角色和代理角色的共同接口
* @author Administrator
*
*/
public abstract class Subject {
//真实对象和代理对象需要做的事
public abstract void request();
}
2. 真实角色:需要实现抽象角色,是被代理的对象。
package com.tydic.proxy;
/**
* 真实角色
* @author Administrator
*
*/
public class RealSubject extends Subject {
@Override
public void request() {
System.out.println("from real subject!");
}
}
3. 代理角色:实现抽象角色,并持有一个真实角色的引用。
package com.tydic.proxy;
/**
* 代理角色
* @author Administrator
*
*/
public class ProxySubject extends Subject {
private RealSubject realSubject;//代理角色内部引用了真实角色
@Override
public void request() {
this.preRequest();//在真实对象操作之前所附加的操作
if(null == realSubject){
realSubject = new RealSubject();
}
realSubject.request();//真实角色完成的事情
this.postRequest();//在真实对象操作之后附加的操作
}
private void preRequest(){
System.out.println("pre request!");
}
private void postRequest(){
System.out.println("post request!");
}
}
4. 编写客户端代码
package com.tydic.proxy;
public class Client {
public static void main(String[] args) {
Subject subject = new ProxySubject();
subject.request();
}
}
更多java相关内容感兴趣的读者可查看本站专题:《Java面向对象程序设计入门与进阶教程》、《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总》
希望本文所述对大家java程序设计有所帮助。
来源:https://blog.csdn.net/zw19910924/article/details/45227685
标签:Java,设计模式,静态代理模式
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
SpringCloud如何搭建一个多模块项目
2022-10-22 13:33:39
![](https://img.aspxhome.com/file/2023/1/78881_0s.png)
java实现图片写入高清字体及带边框的方法
2023-11-29 03:43:47
OpenGL Shader实现光照发光体特效
2022-03-16 18:51:50
![](https://img.aspxhome.com/file/2023/5/101865_0s.png)
C#控制台输出进度和百分比的实例代码
2021-10-01 23:49:43
JAVA实现心跳检测(长连接)
2022-12-16 04:26:30
![](https://img.aspxhome.com/file/2023/6/81246_0s.jpg)
Qt串口通信开发之QSerialPort模块简单使用方法与实例
2023-03-23 03:25:45
![](https://img.aspxhome.com/file/2023/1/112291_0s.png)
Java C++ 算法题解leetcode1608特殊数组特征值
2023-05-21 21:09:01
![](https://img.aspxhome.com/file/2023/1/61121_0s.png)
Java编程中的条件判断之if语句的用法详解
2022-11-27 14:14:36
解决SpringBoot自定义拦截器和跨域配置冲突的问题
2022-01-31 04:59:29
基于javassist进行动态编程过程解析
2021-12-03 07:23:19
Android编写简单的网络爬虫
2023-09-24 03:44:52
![](https://img.aspxhome.com/file/2023/0/117090_0s.png)
Java reservedcodecachesize虚拟机参数案例详解
2022-03-15 12:18:48
![](https://img.aspxhome.com/file/2023/9/62029_0s.png)
Android中双击返回键退出应用实例代码
2022-02-20 00:28:44
WeakHashMap 和 HashMap 区别及使用场景
2022-06-25 02:16:15
![](https://img.aspxhome.com/file/2023/4/118894_0s.png)
java中为何重写equals时必须重写hashCode方法详解
2022-10-24 01:44:39
Java如何从json字符串中获取某个值详解
2023-11-18 12:18:12
![](https://img.aspxhome.com/file/2023/6/108386_0s.png)
Springboot整合Dozer实现深度复制的方法
2023-11-12 17:18:11
C#实现文件夹的复制和删除
2023-02-18 00:54:22
Java SpringBoot整合SpringCloud
2022-11-11 15:07:46
![](https://img.aspxhome.com/file/2023/2/63002_0s.png)
基于java查找并打印输出字符串中字符出现次数
2022-07-28 19:45:47