静态代理和动态代理

静态代理

代理接口

public interface Person {public String wakeUp(String name);public String lunch(String name);
}

被代理对象

public class Student implements Person{@Overridepublic String wakeUp(String name) {System.out.println(name+"星期一早上8点上班!");return name+"wakeup";}@Overridepublic String lunch(String name) {System.out.println(name+"中午和某某一起在国际饭店吃午饭");return name+"lunch";}
}

静态代理对象

public class proxyStudent implements Person{public Student student=new Student();@Overridepublic String wakeUp(String name) {System.out.println(name+"的妈妈已经做好了早餐,准备叫她起床~");return student.wakeUp(name);}@Overridepublic String lunch(String name) {System.out.println(name+"的同事已经下班,正在等待她下班,一起去吃午饭~");return student.lunch(name);}
}

测试

public class proxyStudentTest {public proxyStudent proxyStudent=new proxyStudent();@Testpublic void wakeUp() {proxyStudent.wakeUp("莹莹");}@Testpublic void lunch() {proxyStudent.lunch("莹莹");}
}

动态代理

代理接口person 类
被代理对象 student 类
jdk动态代理,使用jdk动态代理让程序在运行的过程中动态的帮我们去创建代理对象这个类,然后创建对象

public class proxyUtile2 {private Person person=new Student();public Person createProxy(){Object o = Proxy.newProxyInstance(proxyUtile2.class.getClassLoader(), person.getClass().getInterfaces(), new InvocationHandler() {@Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {System.out.println(method.getName());if (method.getName().equals("lunch")){System.out.println(Arrays.toString(args)+"的同事已经下班,正在等待她下班,一起去吃午饭~");method.invoke(person,args);}else if(method.getName().equals("wakeUp")){System.out.println(Arrays.toString(args)+"的妈妈已经做好了早餐,准备叫她起床~");method.invoke(person,args);}else {System.out.println("没有此功能~");}return null;}});return (Person)o;}
}

测试

    public proxyUtile2 proxyUtile2=new proxyUtile2();@Testpublic void createProxy() {Person proxy = proxyUtile.createProxy();proxy.lunch("青禾");proxy.wakeUp("青禾");Person proxy2 = proxyUtile2.createProxy();proxy2.lunch("青禾er");proxy2.wakeUp("青禾er");}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/839661.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C++风云录】数据处理新纪元:激光扫描数据处理

从libLAS到SPDLib:全面解读六大顶级数据处理库 前言 本文将探讨六个关于点云数据处理的库,包括libLAS、PDAL、PCL、LASlib、LAStools和SPDLib。每个库都将在简介、功能以及支持的格式等方面进行深入的解析和阐述。 欢迎订阅专栏:C风云录 文…

如何让程序适应ChatGPT:提升开发效率的指南

ChatGPT作为一种强大的AI助手,已经在各行各业中展现了其独特的价值。在软件开发领域,如何让程序更好地适应ChatGPT,从而提升开发效率,是一个值得深入探讨的话题。本文将介绍一些策略和方法,帮助开发者优化程序&#xf…

什么是 UUID,uuid

文章目录 一、是什么二、为什么三、怎么用 标题:深入探讨UUID:全球唯一标识符的秘密 一、是什么 在当今数字化时代,唯一标识符(UUID)在计算机科学领域扮演着重要的角色。UUID是一种用于标识信息的唯一字符串&#xff0…

工具-博客搭建

以下相关讲解均基于hexo github pages方案,请注意!!!博客搭建方案选择 参考文章1 搭建教程 参考文章1 hexo github pages搭建过程中遇到的问题 删除categories、tags 1、删除含有需要删除categories、tags的文章 2、hexo …

【intel CPU】三代牙膏的对比

1、PC处理器的选择 制程工艺 传说的“intel7”,感觉就像老婆饼,并不是7nm。 2、12代到13代其实应该归为一代,那就是大核心不行就堆小核心 3、所以智能踢掉有小核的; 3.1、CPU规格 3.2 内存规格 3.3 封装规格 其他都是一样的; …

彩色进度条(C语言版本)

.h文件 #include<stdio.h> #include<windows.h>#define NUM 101 #define LOAD_UP 50 #define LOAD_DOWN 60 #define SLEEP_SLOW 300 #define SLEEP_FAST 70 版本1&#xff1a;&#xff08;初始版&#xff09; //v1 #include "progress.h" int main() …

Spring ----> IOC

文章目录 一、 Spring 是一个包含众多工具的IoC容器二、 什么是IOC以及好处三、 如何实现loc思想四、Spring提供的实现loC的方法 --- 类注解方法注解4.1 类注解类注解概念介绍类注解的使用 4.2 方法注解Bean 一、 Spring 是一个包含众多工具的IoC容器 场景解析&#xff1a;首先…

TAS5711带EQ和DRC支持2.1声道的20W立体声8V-26V数字输入开环D类数字功放音频放大器

前言 数字功放很难搞&#xff0c;寄存器很多&#xff0c;要配置正确才有声音&#xff0c;要想声音好&#xff0c;要好好调整。 TAS5711出道很多年了&#xff0c;现在仍然在不少功放、音箱中能看到。 TAS5711特征 音频输入/输出 从 18V 电源向 8Q 负载提供 20W 功率 宽 PVDD…

使用libdmtx库高效识别DM码,关键是图像预处理

直接代码 void MainWindow::on_pushButton_decode_datamatrix_clicked() {//ROIcv::Rect rect(876,172,1200,1200);cv::Mat Dm_image_roi Dm_image(rect);cv::imshow("ROI",Dm_image_roi);cv::waitKey(1);//return;//Resizecv::Size size(Dm_image_roi.rows/2 ,Dm_…

【栈】Leetcode 71. 简化路径【中等】

简化路径 给你一个字符串 path &#xff0c;表示指向某一文件或目录的 Unix 风格 绝对路径 &#xff08;以 ‘/’ 开头&#xff09;&#xff0c;请你将其转化为更加简洁的规范路径。 在 Unix 风格的文件系统中&#xff0c;一个点&#xff08;.&#xff09;表示当前目录本身&am…

MySQL的主从复制(主从数据库都是Linux版本)

概述 1.什么是主从复制 主从复制是指将主库的 DDL 和 DML 操作通过二进制日志传到从库服务器中&#xff0c;然后在从库上对这些日志重新执行&#xff08;也叫重做&#xff09;&#xff0c;从而使得从库和主库的数据保持一致。 2.主从复制作用 数据备份&#xff1a;通过主从复…

SQL:学习SQL优化

学习 1.语句 2.原则&#xff08;三条快速记忆&#xff09; 3.常见查询类型 试验 本次试验采用SQL表中的world 数据库中city表来试验 1.查询方法 explain SELECT * FROM city where ID>500 limit 10; #1.all查询&#xff0c;主要是因为查询的键不是District&#xff0c;…

新加坡裸机云多IP服务器与跨境外贸业务的适配性

在数字化时代&#xff0c;跨境外贸业务对服务器的需求愈发高标准化、多元化。新加坡裸机云多IP服务器&#xff0c;凭借其独特的优势&#xff0c;成为了跨境外贸等业务的首选。源库主机测评将为您科普新加坡裸机云多IP服务器如何满足跨境外贸等业务的需要。 首先&#xff0c;新加…

工业交换机的好处有哪些?

工业交换机是现代工业网络中不可或缺的重要组成部分&#xff0c;它扮演着连接和管理各种网络设备的关键角色。工业交换机的优点不言而喻&#xff0c;首先是其稳定可靠的性能&#xff0c;能够支撑工业环境下的高负荷工作。无论是在恶劣的温度、湿度或电磁干扰的环境下&#xff0…

【Java】/*类和对象(上)*/

目录 一、什么是类、什么是对象 二、为什么要学习类和对象 三、初识面向过程和面向对象编程 四、如何定义类 4.1 语法形式 4.2 定义示例 示例一&#xff1a;定义一个描述学生的类 示例二&#xff1a;定义一个描述冰箱的类 示例二&#xff1a;定义一个描述狗的类 4.3…

Python基础学习笔记(五)——选择结构与循环结构

目录 程序的组织结构条件选择结构1. 单分支结构2. 双分支结构3. 多分支结构4. 嵌套&#xff08;分支&#xff09;结构5. 无内容执行6. 条件表达式 循环结构1. 可迭代对象2. range()函数3. for循环语句4. while循环语句5. 结束语句 程序的组织结构 程序的组织结构主要有以下三种…

Flutter 中的 DraggableScrollableSheet 小部件:全面指南

Flutter 中的 DraggableScrollableSheet 小部件&#xff1a;全面指南 Flutter 提供了多种展示和交互数据的方式&#xff0c;其中 DraggableScrollableSheet 是一个功能丰富的组件&#xff0c;它允许用户通过拖拽操作来展开和隐藏一个可滚动的面板。这个小部件非常适合实现如评…

新媒体运营如何抓住热点? 沈阳新媒体运营培训

01.如何来寻找热点 热点之所以称为热点&#xff0c;就是它的实时性强&#xff0c;一般情况下我们将热点分为常规型热点和突发型热点&#xff08;社会型事件&#xff09;&#xff0c;但是对于新媒体运营来说&#xff0c;常规型热点是可以提前知晓的&#xff0c;可以预先策划的&…

树形结构-数据表模型

路径枚举模型 实现的无级树形列表 分类表 CREATE TABLE categories (name CHAR(10) NOT NULL,id CHAR(1) NOT NULL PRIMARY KEY,path VARCHAR(500) NOT NULL ); 加上 邻接表 的特性 CREATE TABLE categories (name CHAR(10) NOT NULL,id INT NOT NULL PRIMARY KEY,path VARC…

MySQL5个查询

# 总查询 EXPLAIN SELECT * FROM city; # 范围查询 EXPLAIN SELECT * from city where ID>5 and ID<20; #主键查询 EXPLAIN SELECT * from city where ID5; # 索引查询 EXPLAIN SELECT * from city where CountryCodeNLD; # 普通索引 EXPLAIn SELECT * from cit…