java中代理模式 之 静态代理模式

devtools/2025/3/1 22:17:40/

目录

简介:

主要结构:

 静态代理代码准备:

公共接口:

目标类:

代理类:

运行测试:

静态代理模式优缺点


简介:

        1.代理模式是为其他对象提供一种代理以控制对这个对象的访问。

        2.代理对象可以在客户端和目标对象之间起到中介的作用,

        3.通过代理对象,客户端可以间接访问目标对象

        4.代理对象可以在访问目标对象前后执行一些额外的操作(新增)。

主要结构:

  • 抽象主题(Subject)接口:代理对象和目标对象的共同接口。这个很重要,他俩要实现同一个接口
  • 真实主题(Real Subject)类(目标对象):定义了代理所代表的真实对象,实现了抽象主题接口,包含了具体的业务逻辑。
  • 代理(Proxy)类(代理对象):实现了抽象主题接口,持有一个真实主题的引用(其中有目标对象的声明),在客户端调用抽象主题接口中的方法时。

 静态代理代码准备:

公共接口:

java">public interface Service{void add();void delete();void update();void query();
}

目标类:

java">
public class ServiceImpl implements Service{@Overridepublic void add() {System.out.println("add...");}@Overridepublic void delete() {System.out.println("delete...");}@Overridepublic void update() {System.out.println("update...");}@Overridepublic void query() {System.out.println("query...");}
}

代理类:

在这里我新增了一个计算程序运行时长的功能

java">public class ServiceProxy implements Service{//将目标对象作为代理对象的一个属性,这样比继承的欧俄厚度低private Service target=null;//这就是OrderService//创建代理对象的时候传一个public OrderServiceProxy(OrderService target) {this.target = target;}@Overridepublic void add() {//代理方法//新增long begin = System.currentTimeMillis();//对象的的目标方法target.add();//新增long end = System.currentTimeMillis();System.out.println((end - begin) + "ms");}@Overridepublic void delete() {//代理方法//新增long begin = System.currentTimeMillis();target.modify();//新增long end = System.currentTimeMillis();System.out.println((end - begin) + "ms");}@Overridepublic void update() {//代理方法long begin = System.currentTimeMillis();target.update();long end = System.currentTimeMillis();System.out.println((end - begin) + "ms");}@Overridepublic void query() {//代理方法//新增long begin = System.currentTimeMillis();target.query();//新增long end = System.currentTimeMillis();System.out.println((end - begin) + "ms");}}

运行测试:

java">public class Test {public static void main(String[] args) {//创建目标对象Service target = new ServiceImpl();//创建代理对象并传入目标对象Service ServiceProxy = new ServiceProxy(target);//调用代理ServiceProxy.generate();ServiceProxy.modify();ServiceProxy.detali();}
}

静态代理模式优缺点

优点:

        1.新增功能时遵守了ocp开闭原则

        2.使用关联关系将目标对象注入代理对象,大大减小了代码的耦合度

缺点:

        一个代理对象只能管理一个目标对象,要是目标对象多了这很容易形成类爆炸


http://www.ppmy.cn/devtools/163744.html

相关文章

DeepSeek “源神”启动!「GitHub 热点速览」

上周,DeepSeek 官方宣布将陆续发布 5 个开源项目。本周一开源社区就迎来了首发之作——FlashMLA!该项目开源后,不到一天 Star 数已突破 6k,并且还在以惊人的速度持续飙升。 GitHub 地址:github.com/deepseek-ai/FlashM…

Flutter状态管理框架GetX最新版详解与实践指南

一、GetX框架概述 GetX是Flutter生态中轻量级、高性能的全能开发框架,集成了状态管理、路由导航、依赖注入等核心功能,同时提供国际化、主题切换等实用工具。其优势在于代码简洁性(减少模板代码约70%)和高性能(基于观…

css的元素显示模式

一.什么是元素显示模式 作用&#xff1a;网页的标签非常多&#xff0c;不同地方会用到不同类型的标签&#xff0c;了解他们的特点可以更好的布局我们的网页。 元素显示模式就是元素(标签)以什么方式进行显示&#xff0c;比如<div>自己占一行&#xff0c;比如一行可以放多…

rust学习笔记7-344. 反转字符串

今天学习两个类型字符串String和字符串切片&#xff08;&str&#xff09; 字符串String是一个堆分配的可变字符串类型 源码 pub struct String { vec: Vec<u8>, } 字符串切片&#xff08;&str&#xff09;本质上是一个动态大小的字符串切片&#xff0c;它表…

【算法】MySQL算法

第二高薪水 本题求Employee表中的第二高的不同薪水&#xff0c;也就是说如果Employee表是&#xff1a; 则第二高的薪水是2000。 题目要求输出的格式是&#xff1a; 对应的sql语句&#xff1a; 该语句的执行顺序&#xff1a; 1.从Eomployee表中选取所有行。 2.对salary列进行…

Centos7源码编译安装Sqlite最新版本

下载源码 https://www.sqlite.org/download.html 复制下载链接&#xff0c;然后用 wget 下载 wget https://www.sqlite.org/2025/sqlite-autoconf-3490100.tar.gz 解压缩编译安装 tar -zxf sqlite-autoconf-3490100.tar.gz cd sqlite-autoconf-3490100 ./configure --prefi…

编程小白冲Kaggle每日打卡(17)--kaggle学堂:<机器学习简介>随机森林

Kaggle官方课程链接&#xff1a;Random Forests 本专栏旨在Kaggle官方课程的汉化&#xff0c;让大家更方便地看懂。 Random Forests 使用更复杂的机器学习算法。 介绍 决策树给你留下了一个艰难的决定。一棵有很多叶子的深树会被过度拟合&#xff0c;因为每一个预测都来自它…

GD32F450 使用

GB32F450使用 1. 相关知识2. 烧写程序3. SPI3.1 spi基础3.2 spi代码 4. 串口4.1 串口引脚4.2 串口通信代码 问题记录1. 修改晶振频率 注意&#xff1a;GD32F450 总共有三种封装形式&#xff0c;本文所述的相关代码和知识&#xff0c;均为 GD32F450IX 系列。 1. 相关知识 参数配…