GOF23 设计模式之 代理模式

【第三只眼:Oracle通过归档日志查看系统的业务高峰sql】 根据oracle归档的业务高峰量,查找业务sql,进行优化 阅读详情

代理模式:

  • 通过代理,控制对对象的访问!
    • 可以详细控制访问某人(某类)的方法,在调用这个方法前做前置处理,调用这个方法之后做后置处理。(即:APO的围观实现)
  • AOP(Aspect Oriented Programming 面向切面编程)的核心实现机制!
  • 可以只关注核心流程。通过代理实现将统一的流程代码放到代理类中处理

核心角色

  • 抽象角色:定义代理角色和真实角色的公共对外方法
  • 真实角色:
    1. 实现抽象角色,定义真实角色所要实现的业务逻辑,供代理角色调用
    2. 关注真正的业务逻辑
  • 代理角色
    1. 实现抽象角色,是真实角色的代理,通过真实角色的业务逻辑方法来实现抽象方法,并可以附加自己的操作。
    2. 将统一的流程控制放到代理角色中处理

应用场景

  • 安全代理:屏蔽对真实角色的直接访问
  • 远程代理:通过代理类处理远程方法调用(RMI)
  • 延迟加载:先加载轻量级的代理对象,真正需要再加载真实对象。
    • 比如你要开发一个大文档查看软件,大文档中有大的图片,有可能一个图片有100MB,在打开文件时不可能将所有的图片都显示出来,这样就可以使用代理模式,当需要查看图片时,用proxy来进行大图片的打开。

分类

  • 静态代理(静态定义代理类)
  • 动态代理(动态生成代理类)
    • JDK自带的动态代理
    • javassist字节码操作库实现
    • CGLIB
    • ASM(底层使用指令,可维护性较差)

静态代理一种简单的实现

  • Star接口
package com.coderbean.proxy.staticProxy;

/**
 * Created by Chang on 15/9/27.
 */
public interface Star {
    /**
     * 面谈
     */
    void confer();

    /**
     * 签合同
     */
    void signContract();

    /**
     *订票
     */
    void bookTicket();

    /**
     * 唱歌
     */
    void sing();

    /**
     * 收尾款
     */
    void collectMoney();
}
  • RealStar类
package com.coderbean.proxy.staticProxy;

/**
 * Created by Chang on 15/9/27.
 */
public class RealStar implements Star {
    @Override
    public void confer() {
        System.out.println("RealStar.confer");
    }

    @Override
    public void signContract() {
        System.out.println("RealStar.signContract");
    }

    @Override
    public void bookTicket() {
        System.out.println("RealStar.bookTicket");
    }

    @Override
    public void sing() {
        System.out.println("RealStar.sing");
    }

    @Override
    public void collectMoney() {
        System.out.println("RealStar(周杰伦本人).collectMoney");
    }
}
  • ProxyStar类
package com.coderbean.proxy.staticProxy;

/**
 * Created by Chang on 15/9/27.
 */
public class ProxyStar implements Star {

    private Star star;

    public ProxyStar(Star star) {
        this.star = star;
    }

    @Override
    public void confer() {
        System.out.println("ProxyStar.confer");
    }

    @Override
    public void signContract() {
        System.out.println("ProxyStar.signContract");
    }

    @Override
    public void bookTicket() {
        System.out.println("ProxyStar.bookTicket");
    }

    @Override
    public void sing() {
        star.sing();
    }

    @Override
    public void collectMoney() {
        System.out.println("ProxyStar.collectMoney");
    }
}
  • Client类
package com.coderbean.proxy.staticProxy;

/**
 * 测试代理模式
 * Created by Chang on 15/9/27.
 */
public class Client {
    public static void main(String[] args) {
        Star real = new RealStar();
        Star proxy = new ProxyStar(real);

        proxy.confer();
        proxy.signContract();
        proxy.bookTicket();
        proxy.sing();
        proxy.collectMoney();
    }
}

动态代理(动态生成代理类)

动态代理相比于静态代理的优势

  • 抽象角色中(接口)声明的所有方法都被转移到调用处理器一个集中的方法中处理,这样,我们可以更加灵活和统一的处理众多的方法。

JDK自带的动态代理

  • java.lang.reflect.Proxy 作用:动态生成代理类和对象
  • java.lang.reflect.InvocationHandler(处理器接口)
    • 可以通过invoke方法实现对真实角色的代理访问。
    • 每次通过Proxy生成代理类对象时都要指定对应的处理器对象
Star realStar = new RealStar();
StarHandler handler = new StarHandler(realStar);
Star proxy = (Star)Proxy.newProxyInstance(ClassLoader.getSystemClassLoader(),new Class[]{Star.class},handler);
proxy.sing();

动态代理示例

  • Star接口(同上)
  • RealStar类(同上)
  • StarHandler类
package com.coderbean.proxy.dynamicProxy;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;

/**
 * Created by Chang on 15/9/27.
 */
public class StarHandler implements InvocationHandler {

    Star realStar;

    public StarHandler(Star realStar) {
        super();
        this.realStar = realStar;
    }

    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        System.out.println("#####");
        //可以在这里方便的放置一些处理的代码
        method.invoke(realStar,args);


        return null;
    }
}
  • Client类
package com.coderbean.proxy.dynamicProxy;

import java.lang.reflect.Proxy;

/**
 * Created by Chang on 15/9/27.
 */
public class Client {

    public static void main(String[] args) {
        Star realStar = new RealStar();

        StarHandler handler = new StarHandler(realStar);

        Star proxy = (Star)Proxy.newProxyInstance(ClassLoader.getSystemClassLoader(), new Class[]{Star.class},handler);

        proxy.bookTicket();
        proxy.sing();
    }

}
Arcgis使用NDVI值遥感反演叶面积指数(LAI) 经验模型反演操作不难,主要是要多看文献,了解公式。本文中的公式我也不清楚是哪个作物的NDVI和LAI的关系(别人提供的),继续看文献整理吧。后续会在下面罗列更新一下主要公式。 阅读详情

相关推荐

保姆级教程:用ROS2 Humble和激光雷达,5分钟搞定机器人避障(附Python代码)

本文提供了一份详细的ROS2 Humble激光雷达避障实战指南,帮助开发者快速实现机器人避障功能。通过环境配置、硬件连接和Python代码实现,5分钟内即可让机器人自主避开障碍物。文章还涵盖了参数调优、常见问题排查及进阶优化技巧,适合机器人开发初学者和进阶用户。

weixin_42528902的博客 342

GoF之代理模式

JDK动态代理

refreshh的博客 253

MATLAB数据可视化:pcolor函数从入门到精通(附colormap调色秘籍)

本文深入解析MATLAB中pcolor函数的数据可视化应用,从核心机制、坐标网格指定到常见陷阱规避。重点揭秘colormap调色秘籍,涵盖内置色系选用原则、个性化定制方法及高级渲染技巧,助你创作出信息准确、视觉出色的专业图表,精通从数据到出版级图表的全流程。

kafka6courier的博客 245

十一、GoF之代理模式

十一、GoF之代理模式

既来之的博客 868

BMS开发避坑指南:如何用ADBMS6815实现0.03%精度的电池采样?

本文深入解析了如何利用ADBMS6815等高精度AFE芯片,在车规级BMS开发中实现0.03%级别的电池电压采样精度。文章从芯片选型、硬件设计、软件配置、算法优化到系统验证,提供了一套完整的实战指南,帮助工程师系统性地提升BMS测量精度,从而保障电池安全、延长寿命并增强产品竞争力。

weixin_28314575的博客 134

麒麟V10系统下微信PC版安装全攻略:从源配置到一键安装(附常见问题解决)

本文详细介绍了在麒麟V10系统下安装和优化微信PC版的完整流程,包括系统环境准备、软件源配置、多途径安装方案以及性能优化技巧。特别针对国产操作系统用户,提供了从基础安装到高级配置的一站式解决方案,并附有常见问题排查方法,帮助用户快速实现微信PC版的高效运行。

weixin_30500105的博客 714

【Spring】GoF 之代理模式

【Spring】GoF 之代理模式

秋玄的博客 1031

(LDA新闻文本主题分析)基于 gensim训练LDA模型,进行新闻文本主题分析 完整代码+数据 可直接运行

(LDA新闻文本主题分析)基于 gensim训练LDA模型,进行新闻文本主题分析 完整代码+数据 可直接运行

机器学习深度学习业余选手 1498

GoF 代理模式

代理模式,就是自己做不了,需要别人来代理,代替自己来完成最终这个行为还是要发生,只不过不是由自己来完成,而是由别人代理完成,只是对于客户其他人来说感受不到。

m0_74146036的博客 874

STM32(HAL库)驱动OLED

通过STM32F103C8T6单片机采用HAL库方式对0.96寸OLED(IIC通讯)屏幕进行驱动。

weixin_44597885的博客 8796

基于语义分割的实时建图:HDMap动态更新

基于语义分割的实时建图:HDMap动态更新​ ,人工智能,计算机视觉,大模型,AI,本文围绕基于语义分割的实时建图技术在HDMap动态更新中的应用展开,介绍了语义分割基础、HDMap概述、相关实时建图技术、动态更新关键技术、系统性能评估指标、实际应用案例、面临的挑战与解决方案及未来发展趋势。阐述了该技术如何利用传感器数据和语义分割算法,解决传统HDMap构建与更新的弊端,分析了其在精度、实时性、鲁棒性等方面的表现,以及在自动驾驶和智能交通中的应用,还探讨了现存问题及未来优化方向。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 22万+

GOF23设计模式之代理模式

GOF23设计模式之代理模式 核心作用:通过代理,控制对对象的访问。可以详细控制访问某个(某类)对象的方法,在调用这个方法前做前置处理,调用这个方法后做后置处理(即:AOP的微观实现) AOP(Aspect Oriented Programming 面向切面编程)的核心实现机制 核心角色: 1)抽象角色:定义代理角色和真实角色的公共对外方法 2)真实角色:实现抽象角色,定义真实角色索要实...

weixin_30352645的博客 101

HTML粉色爱心(完整代码)

HTML语言实现粉色爱心的完整代码。

AIGC 1105

java_236_GOF23设计模式_代理模式_静态模式_练习

//------------------静态模式--------------- //---------------------接口------------------- package java_236_GOF23设计模式_代理模式_静态模式_练习; /** 接口 / public interface Star {//明星 //属性 void confer();//confer协议 void signContract();//signContract签订合同 void bookTicket();//

weixin_45339692的博客 141

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

GOF23种设计模式-代理模式

代理模式 代理模式:为一个对象提供一个替身,以控制对这个对象的访问。即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能。 代理模式有不同的形式, 主要有三种 静态代理、动态代理 (JDK代理、接口代理)和 Cglib代理 (可以在内存动态的创建对象,而不需要实现接口, 他是属于动态代理的范畴) 。 静态代理 代理对象与目标对象要实现相同的接口,然后通过调用相同的方法来调用目标对象的方法 定义接口 //接口 public interf

MARK19960120的博客 345

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

GOF23 设计模式之代理模式

文章目录一、代理模式是什么?二、结构图三、代理分类实现代码总结 一、代理模式是什么? 代理模式就是为其他对象提供一种代理以控制对被代理对象的访问,也就是我们常说的中介。这种类型的设计模式属于结构型模式。 二、结构图 三、代理分类 静态代理:通过代理类继承原始类,重写原始类的方法来达到增加新功能,每次都会新增一个类。 动态代理:JDK动态代理,cglib动态代理。 实现代码 静态代理 UserHolder 继承User类,重写walk()方法,在打印“我正在行走。。。”的前后各加了一个方法。

lujiedebaba的博客 211

GOF23设计模式之代理模式-Proxy

详解介绍代理模式及Spring AOP 代理模式-Proxy概述比较静态代理动态代理JDk动态代理CGlib动态代理Jdk动态代理与cglib动态代理对比:Spring AOP使用详解实现原理代理方式Spring AOP 如何实现链式调用的? 代理模式-Proxy 概述 定义:为其他对象提供一种代理,已控制对这个对象的访问。 代理对象在客户端和目标对象之前起到中介的作用 类型:结构型设计模式 适用场景: 保护目标对象 增强目标对象 优点: 代理模式能将代理对象与真实调用的目标对象分

zhengyong14350的博客 458

GOF23设计模式-结构型模式2-代理模式

设计模式GOF23-代理模式(Proxy Pattern)

Tumbler 295

【Go实现】实践GoF的23种设计模式:代理模式

代理模式为一个对象提供一种代理以控制对该对象的访问。

ruanrunxue的博客 710

GOF23 设计模式 之代理模式

代理模式的核心作用是通过代理,控制对对象的访问; -aop 面向切面编程 结构 分为 抽象角色, 真实角色,代理角色; 代理模式的应用场景比较广,比如 安全代理,远程加载,延迟加载; ******************************** 一般分为两类 : 1,静态代理 自己定义类实现代理类 2,动态代理 利用框架或者工具 生成代理类 比较常用 ,比如jdk 自带的动态...

wangrong111222的博客 132

设计模式之GOF23代理模式02

静态代理 模拟经纪人与明星开演唱会 public interface Star {/** * 面谈 */void confer();/** * 签合同 */void signContract();/** * 唱歌 */void sing();/** * 收尾款 */void coleectMoney();}&#...

qq_44711190的博客 140

GOF的23种设计模式(8)—代理模式

代理模式 静态代理 角色分析: 抽象角色:一般会使用接口或者抽象类来解决 真实角色:被代理的角色 代理角色:代理真实角色,代理真实角色后,我们一般会做一些附属操作 客户:访问代理对象的人 代理模式的好处 可以使真实角色的操作更加纯粹,不用关注一些公共的业务 公共也就是交给代理角色,实现了业务的分工 公共业务发生扩展的时候,方便集中管理 缺点: 一个真实角色就会产生一个代理角...

Apandam的博客 313

GOF23设计模式_代理模式_静态代理

代理模式(Proxy pattern): 应用场景: 静态代理(静态定义代理类):

MINGDE_SKILL的博客 228

GOF23设计模式(结构型模式)代理模式~

代理模式应用场景十分广泛,随便一个框架都会用到,因此学好代理模式对后续框架学习是最基本的要素!!今天我们就来讲讲代理模式! 目录1、简介1. 核心作用2. 角色分析2. 应用场景4. 分类2、静态代理1. 案例:房东租房2. 优劣分析3. 加深理解3、动态代理1. 简介2. Proxy 类3. InvocationHandler 接口4. 代码示例好处 首先,了解以下23种设计模式中代理模式的定位,它是结构性模式 1、简介 Proxy pattern 1. 核心作用 通过代理,控制对对象的访问.

欢迎来到 Baret-H 的博客 2042

GoF23种设计模式之结构型模式之代理模式

一、概述         为其他对象提供一种代理以控制对这个对象的访问。 二、适用性 1.远程代理(RemoteProxy):为一个对象在不同的地址空间土工局部代表。 2.虚代理(VirtualProxy):根据需要创建开销很大的对象。 3.保护代理(ProtectionProxy):控制对原始对象的访问。 4.智能代理(SmartReference):取代简单的指针,在访问对象时执行

leverli的专栏 2089

设计模式 GOF23 模式比较

设计模式中很多模式及其相像,本文记录一些常见的,易混淆的设计模式,对他们的目的、作用进行比较,以便更好的理解设计模式。

IT老吴的博客 390
上一篇: GOF23 设计模式之 适配器模式
下一篇: GOF 23设计模式之 桥接模式
coderbean
博客等级 码龄11年 12粉丝 84原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值