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,设计模式,静态代理模式
0
投稿

猜你喜欢

  • SpringCloud如何搭建一个多模块项目

    2022-10-22 13:33:39
  • java实现图片写入高清字体及带边框的方法

    2023-11-29 03:43:47
  • OpenGL Shader实现光照发光体特效

    2022-03-16 18:51:50
  • C#控制台输出进度和百分比的实例代码

    2021-10-01 23:49:43
  • JAVA实现心跳检测(长连接)

    2022-12-16 04:26:30
  • Qt串口通信开发之QSerialPort模块简单使用方法与实例

    2023-03-23 03:25:45
  • Java C++ 算法题解leetcode1608特殊数组特征值

    2023-05-21 21:09:01
  • 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
  • Java reservedcodecachesize虚拟机参数案例详解

    2022-03-15 12:18:48
  • Android中双击返回键退出应用实例代码

    2022-02-20 00:28:44
  • WeakHashMap 和 HashMap 区别及使用场景

    2022-06-25 02:16:15
  • java中为何重写equals时必须重写hashCode方法详解

    2022-10-24 01:44:39
  • Java如何从json字符串中获取某个值详解

    2023-11-18 12:18:12
  • Springboot整合Dozer实现深度复制的方法

    2023-11-12 17:18:11
  • C#实现文件夹的复制和删除

    2023-02-18 00:54:22
  • Java SpringBoot整合SpringCloud

    2022-11-11 15:07:46
  • 基于java查找并打印输出字符串中字符出现次数

    2022-07-28 19:45:47
  • asp之家 软件编程 m.aspxhome.com