Java设计模式之静态代理模式实例分析
作者:aronykl 发布时间:2021-05-30 17:44:19
标签:Java,设计模式,静态代理模式
本文实例讲述了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的基本知识,而下面的几篇博客我们着重开始对于数据结构的知识进行学习,这篇博客我们就了解关于顺
- 前言在工作中遇到这样一个问题:开发过程中将数据库的账号、密码等信息配置在了一个单独的properties配置文件中(使用明文)。但运维人员要
- 一、前言在java中,和C语言一样,也有关于字符串的定义,并且有他自己特有的功能,下面我们一起来学习一下。二、String类概述string
- orm框架的本质是简化编程中操作数据库的编码,发展到现在基本上就剩两家了,一个是宣称可以不用写一句SQL的hibernate,一个是可以灵活
- 基本流foreach 实现了外部迭代,它是建立于集合的基础上;stream 流实现的是内部迭代中间操作与终端操作对任意集合使用 stream
- 一、使用方式可以采用Transactional,配置propagation即可。打开org.springframework.transact
- Java 目前已经出到13的版本,但是国内大部分公司应该都停留在 Java 8 的版本(不敢承担升级带来的风险)。在Java8中给我们带来了
- 本文主要介绍了Android studio利用gradle打jar包并混淆的方法,下面话不多说,来看看详细的介绍吧。首先打jar包的配置很简
- mybatis官网中文文档:https://mybatis.org/mybatis-3/zh/sqlmap-xml.htmlmybatis-
- 传统的单例写法解决了什么问题首先,在大多数情况下(不包含面试),传统的单例写法已经完全够用了。通过 synchronized 关键字解决了多
- 本文实例为大家分享了Android实现毛玻璃效果弹出菜单动画的具体代码,供大家参考,具体内容如下仿ios上屏幕下方向上滑出来的一个模糊菜单,
- 本文介绍一个C#函数,可以实现计算文件的MD5值,可以用于文件传输后进行有效性校验。我们知道可以通过将一个字符串进行散列(Hash)运算得到
- 简介相信大家有配置过多数据源,或者即将配置多数据的朋友们,会发现网上大概有以下几种方案:1. 使用 AOP 切片进行动态数据源切换2. 使用
- 简述Java中Socket分为普通Socket和NioSocket两种,这里介绍Socket。我们可以把Socket比作两个城市间的交通工具
- Android仿通话来电界面,供大家参考,具体内容如下简介:开发中需要模拟来电时的通话界面,仿照来电界面实现来电时播放铃声,界面通过动画模拟
- Http协议的重要性相信不用我多说了,HttpClient相比传统JDK自带的URLConnection,增加了易用性和灵活性(具体区别,日
- 一、前言目前大部分手机都是 60Hz 的刷新率,也就是 16.6ms 刷新一次,系统为了配合屏幕的刷新频率,将 Vsync 的周期也设置为
- 1.mkString()方法的使用:mkString(seq:String)方法是将原字符串使用特定的字符串seq分割。mkString(s
- 本文实例讲述了C#使用NPOI导入Excel的方法。分享给大家供大家参考,具体如下:NPOI是由国人开发的一个进行excel操作的第三方库。