package com.selfStudy;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
/*本文来学习代理设计模式:
* 代理模式:它是你为了提供额外的或不同的操作,而插入的用来代替“实际”对象的对象;充当着中间人
* 的角色;(就想公司里老板和秘书的关系);
* 组成元素:
* 1.抽象角色:声明真实对象和代理对象的共同接口;
* 2.真实角色:代理角色所代表的真实对象,是我们最终要引用的对象;
* 3.代理角色:其内部通过构造器拿到实际对象的引用,同时代理对象与真实的对象实现相同的接口,以便
* 在任何是否都能代替真实对象。同时,代理对象可以在执行真实对象操作时,附加其他的操作;
* 相当于对真实对象进行了封装;
*
*
* */
//1.抽象角色
interface Subject{
void doSomething(String args);
void doSomething();
}
//2.真实对象
class RealSubject implements Subject{
public void doSomething(){
System.out.println(" RealSubject dosothming");
}
public void doSomething(String args) {
System.out.println("i will sumbit this "+args+" to our Web service");
}
}
//3.代理角色
class ProxySubject implements Subject{
private Subject real=null;
ProxySubject(Subject real){
this.real = real;
}
@Override
public void doSomething(String args) {
System.out.println("frist , examine the network");
real.doSomething(args);
}
@Override
public void doSomething() {
System.out.println("proxySubject dosomething");
real.doSomething();
}
}
/*
* 上述代码客服端实际上是想调用的是RealSubject 的doSomething方法,可以看到通过代理模式,其不但执行了RealSubject的doSomething
* 方法,还执行了一些额外的操作;
* 上面模式的缺点:
* 首先:真实角色必须事先已经存在,并且其作为代理角色的内部属性;
* 其次:一个真实的角色必须对应一个代理角色,那么就会存在这样的问题,如果存在大量的真实角色,那岂不会存在大量的代理角色
* 从而使类数量急剧膨胀;
* 因此引入动态代理模式:
* 此时就会用到了java反射包中的 InvocationHandler接口和Proxy类;
* */
class DynamicProxy implements InvocationHandler{
private Object proxied;
public DynamicProxy(Object proxied){
this.proxied = proxied;
}
/**
* Object proxy:在其上调用方法的代理实例
* Method method:对应于在代理实例上调用的接口方法的 Method 实例。Method 对象的声明类将是在其中声明方法的接口
* ,该接口可以是代理类赖以继承方法的代理接口的超接口。
* Object[] args:包含传入代理实例上方法调用的参数值的对象数组,如果接口方法不使用参数,则为 null。基本类型的参数
* 被包装在适当基本包装器类(如 java.lang.Integer 或 java.lang.Boolean)的实例中
*/
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
if(args!=null)
return method.invoke(proxied, args);
return method.invoke(proxied);
}
}
/**
* ClassLoader: loader - 定义代理类的类加载器
* Class[] :interfaces - 代理类要实现的接口列表
* InvocationHandler:h - 指派方法调用的调用处理程序
*/
public class ProxyModel {
public static void main(String[] args) {
ProxySubject ps = new ProxySubject(new RealSubject());
ps.doSomething();
ps.doSomething("seek people");
RealSubject real = new RealSubject();
Subject proxy = (Subject)Proxy.newProxyInstance(Subject.class.getClassLoader(),
new Class[]{Subject.class},new DynamicProxy(real));
proxy.doSomething("hahahah");
}
}
相关推荐
手把手教你用89C52单片机驱动0.96寸OLED(IIC接口,附完整代码)
本文详细介绍了如何使用89C52单片机通过I2C接口驱动0.96寸OLED显示屏,包括硬件连接、I2C通信原理、SSD1306驱动芯片的初始化及显存管理技巧,并提供了完整的代码示例和常见问题排查方法,帮助电子爱好者快速掌握OLED显示技术。
Java最常见设计模式:单例模式、工厂模式和代理模式
一、设计模式的分类 总体来说23种设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。 我们主要来了解一下: 单例模式(Singleton) 简单的工厂模式(Factory) 代理模式(Proxy) 1. 单例模式
从零构建:基于Docker与FRR的OSPF虚拟网络实验室
本文详细介绍了如何利用Docker与FRR构建OSPF虚拟网络实验室,从环境设计到高级网络拓扑配置,再到实验验证与排错。通过容器化技术实现高效资源利用和快速部署,特别适合网络协议教学、企业网络架构验证等场景。
23种java设计模式之:门面模式、享元模式、代理模式
本文重点介绍java 23种设计模式中,7种结构型模型的后3种模式:门面模式、享元模式、代理模式。内容用思维导图的方式来表现。后面的文章将继续介绍java 23种设计模式。5. java设计模式 门面模式6. java设计模式 享元模式7. java设计模式 代理模式如果大家喜欢这些内容,请点赞、收藏、转发!关注“Java进阶营”,这样收看更多的精彩文章就不会迷路。 开源框架源码,源码是你进阶必不可少的一步。微服务架构专题架构筑基专题设计模式工程化B2商城项目实战有了思维导图,有没有免费资料?有没有志同道合
在虚拟机上搭建FTP服务器
chroot_list_file=/etc/vsftpd/chroot_list # 对chroot_list下用户限制。[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf #打开配置文件。# 指定用户的shell: -s /usr/bin/nologin。# 在配置文件中找到以下几行代码, 去掉注释(去掉 "#"号)# 指定用户主目录:/data/ftp/ftpuser -M。(2)修改配置文件,路径/etc/vsftpd/ 下的文件。
DFX从芯片到系统:可制造性、可测试性与可靠性设计实战指南
DFX(Design for eXcellence)是一套面向产品全生命周期的设计方法论,涵盖可制造性(DFM)、可测试性(DFT)、可靠性(DFR)等维度。其核心原理是将制造、测试、维护等环节的约束前置到设计阶段,从而降低流片与量产风险。在芯片与系统硬件领域,DFX不仅是提升良率与测试效率的关键手段,更是保障车规、工控等严苛场景下长期稳定运行的基础。从芯片物理实现到PCB布局,再到系统级散热与维护设计,DFX的落地需要工具链、流程闸门与跨部门协作的体系化支撑。本文基于实际项目经验,分享DFX从设计决策到工
Java 设计模式(十三):代理模式
参考链接:代理模式-Proxy Pattern 近年来,代购已逐步成为电子商务的一个重要分支。代购简单来说就是找人帮忙购买所需要的商品,代购网站就是其中一种产物,它为消费者提供在线的代购服务,如果看中某国外购物网站上的商品,可以登录代购网站填写代购单并付款,代购网站会帮助进行购买然后通过快递公司将商品发送给消费者。商品代购过程如图所示: 在软件开发中,也有一种设计模式可以提供与代购网站类似的功能...
Python实战日志_P4_图书馆Web API服务
目标:使用Flask将图书馆系统升级为RESTful API服务,掌握Web开发基础难度:⭐⭐⭐⭐☆预计学习时间:75分钟前置要求:已完成第3篇《个人图书馆管理系统》
从青铜到王者:Java设计模式——代理模式
代理模式是一种结构型设计模式,通过代理对象控制对目标对象的访问。静态代理在编译期确定代理类,需要定义接口、实现类和代理类。代理对象可添加权限检查、日志记录等功能,实现访问控制、功能增强、解耦和延迟加载等作用。类似生活中的房产中介、明星经纪人等,代理模式在软件开发中广泛应用于安全控制、性能监控等场景。
智能水下机器人设计: 基于MATLAB的水下机器人动力学建模和控制系统设计,包括水下环境感知、路径规划和任务执行等
智能水下机器人是指能够在水下自主完成各种任务的机器人,例如探测、勘察、救援等。它具有广阔的应用前景,可用于海洋环境监测、水下考古、海上作业等领域。基于MATLAB的水下机器人设计可以为科研人员和工程师提供强大的建模和仿真工具,帮助他们设计更智能、更高效的水下机器人。智能水下机器人是未来海洋科技发展的重要方向,它将为海洋科学研究、水下考古和海上作业等领域带来新的机遇。MATLAB是一种功能强大的数学和科学计算软件,它可以为智能水下机器人设计提供强大的工具和支持。
Sigrity Power DC Single-BoardPackage IR Drop Analysis模式进行单板压降仿真分析操作指导
如果需要单独对某个via设置参数,右侧选择Setup by padstack,下方下拉选择某个via,单独设置参数即可。举例:板厚1.6mm,内层1OZ(1.2mil,即0.03mm),铜皮宽度1mm,20度温升,允许通流I为2.5A。目的是模拟实际情况,via的孔壁电镀1mil,中间是空心的,让via不完全被填充金属成为实心via。Upper/lower Tolerance:上下公差,设置为5%,也就是压降允许的范围。电流密度计算公式:J=I/A(J为电流密度,I为电流,A为横截面积)
Java:设计模式之代理模式Proxy
<!-- table.sample {border-width:1px; border-spacing:0px; border-style:solid; border-color:#78C0D4; border-collapse:collapse} table.sample th {border-width:1px; padding:3px; border-st
MATLAB极坐标伪彩色圆图绘制之polarPcolor函数
polarPcolor函数介绍 我们经常在论文或期刊上看到如下图这种以色调冷暖代表数值大小的极坐标圆图, 而function [varargout] = polarPcolor(R,theta,Z,varargin)可以很好的帮助我们快速绘制这类极坐标圆图。它非常适合雷达或激光雷达的平面位置指示器。使用polarPcolor函数时,我们只需根据手中数据构造相应的二维矩阵Z即可,十分便捷。varargin值为绘制模式选择。R值为半径坐标一维矩阵,theta值为角坐标一维矩阵。 代码示例 这里使用了海洋表面耀光
Java 设计模式:代理模式详解
代理模式的核心思想是:通过代理对象间接访问目标对象,从而在访问前后添加额外逻辑(如日志、权限校验)或控制访问行为(如懒加载)。它适用于需要保护、增强或优化目标对象访问的场景。
C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片
基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正
visio安装包
Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。
JAVA设计模式:代理模式
代理模式简介 静态代理 动态代理 JDK提供的动态代理 CGLIB动态代理 三种代理的对比 代理模式的优缺点: 代理模式的使用场景:
jre9下载 jdk9
(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】
Java设计模式:代理模式
代理模式根据目的和实现方式不同可分为很多种类。
jdk-8u144-linux-x64.tar.gz.
该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包
Java设计模式: 代理模式
代理模式: (Proxy Pattern)也叫做委托模式,是一个使用率非常高的模式。 定义:为其他对象提供一种代理以控制对这个对象的访问。 个人理解: 代理模式将原类进行封装,客户端不能直接找到原类,必须通过代理角色。即代理是原类的一个替身,客户端要找原类,统统找代理就可以搞定。明星和经纪人就是一种代理模式。 通用类图如下: 角色定义: ● Subject 抽象主题角色 抽象主题类可以是抽象类也可以是接口,是一个最普通的业务类型定义,无特殊要求。 ● RealSubject 具体主题角色 也叫做被
JAVA设计模式5:代理模式
JAVA设计模式5:代理模式 代理模式的定义与特点 代理模式的定义:由于某些原因需要给某对象提供一个代理以控制对该对象的访问。这时,访问对象不适合或者不能直接引用目标对象,代理对象作为访问对象和目标对象之间的中介。 代理模式的主要优点有: 代理模式在客户端与目标对象之间起到一个中介作用和保护目标对象的作用; 代理对象可以扩展目标对象的功能; 代理模式能将客户端与目标对象分离,在一定程度上降低了系统...
java设计模式深度解析与实践:代理模式
代理模式(Proxy Pattern)是一种常用的设计模式,属于结构性模式。其核心思想是通过一个代理对象来控制对目标对象的访问。代理模式能够为目标对象提供多种功能扩展,如权限控制、延迟加载、日志记录等,而无需改动目标对象的代码。访问控制:代理可以灵活地控制对目标对象的访问,实现权限验证和访问限制。延迟加载:代理支持延迟实例化目标对象,优化资源使用,提升应用性能。功能增强:代理可以在目标方法调用前后附加额外的操作,如日志记录、性能监控等。简化接口:代理可以为复杂的目标对象提供简化的接口,方便客户端使用。
java设计模式之:代理模式
代理(Proxy)模式是一种结构型设计模式,提供了对目标对象另外的访问方式;即通过代理对象访问目标对象。这样做的好处是可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能。
Java设计模式:从代理模式到Java动态代理
文章目录前言一、代理模式的定义二、代理模式结构1.代理模式结构图2.代理模式简单实现三、java动态代理1.动态代理定义2.java实现动态代理2.1.java支持动态代理实现所需的类2.2.案例说明2.3.案例实现总结 前言 阅读本文,你可以了解到java设计模式中的代理模式,再深入到了解java动态代理。 一、代理模式的定义 为什么需要代理模式?:当无法直接访问某个对象或访问某个对象存在困难时可以通过一个代理对象来间接访问,为了保证客户端使用的透明性,所访问的真实对象与代理对象需要实现相同的接口。 #
java设计模式 第一章: 代理模式
从今天开始更新java设计模式相关的东西,之前虽然也对java设计模式有过学习单都是走马观花或者应付面试.现在工作中遇到了挑战,编写出优雅的代码成为非常迫切的事情; 代理模式 代理模式是java中常用的设计模式,在比如说在spring中的事物管理就是使用的代理模式; 1.为什么要使用代理模式 所有的设计模式都具有一个目标: 提高代码的复用率,这一点非常重要; 代理模式可以抽取通用的代码生成代理类,通过代理类执行目标对象的方法实现了代码的复用,经典的案列:spring的AOP; 2.代理模式的分类 静态代理
Java设计模式之结构型:代理模式
代理模式的设计动机是通过代理对象来访问真实对象,通过建立一个对象代理类,由代理对象控制原对象的引用,从而实现对真实对象的操作。在代理模式中,代理对象主要起到一个中介的作用,用于协调与连接调用者(即客户端)和被调用者(即目标对象),在一定程度上降低了系统的耦合度,同时也保护了目标对象。但缺点是在调用者与被调用者之间增加了代理对象,可能会造成请求的处理速度变慢,
369



被折叠的 条评论
为什么被折叠?



