首页 > 其他分享 >代理模式

代理模式

时间:2024-10-24 18:58:42浏览次数:1  
标签:对象 代理 模式 bark 设计模式 public

代理设计模式

首先为什么单独介绍这个设计模式,因为这个设计模式实现了SpringAoP的底层原理,后续在Spring的文章中我会提到

设计模式回顾

模式的起源

模式是在特定环境下解决某类重复出现问题的一套成功或有效的解决方案。

每个模式是在特定的环境下才有效,学习模式,除了了解模式本身,还得了解这个模式在什么环境下才能使用

什么是设计模式
  • 设计模式(Design pattern)是一套被反复使用、多数人知晓、经过分类编目的代码设计经验的总结
  • 使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可扩展性和可维护性
  • 通用的设计模式有 23 个,每1个设计模式都是某一类典型问题的解决方案
设计模式的本质

设计模式对面向对象设计原则面向对象三大特性(封装、继承、多态)的灵活应用

23种设计模式

工作中常用的6个设计模式:单例模式、工厂模式、代理模式、观察者模式、策略模式是、责任链模式、模板模式

学习设计模式的误区

设计模式不能滥用:不要以为在任何一个系统中都要使用设计模式,系统也不是套用设计模式越多越好。滥用设计模式将增加系统复杂度,降低系统的可维护性。

特定环境、特定问题、灵活运用

如何正确学习设计模式

学习设计模式五要素如下:

名称:每一种设计模式都有名称,都是经过专门分类编目的,以便于学习交流

问题:每一种设计模式都是某一类典型问题的解决方案

实现:每一种设计模式都有一种或多种代码实现方式(UML类图)

优缺点:每一种设计模式都存在优缺点(没有完美无缺的解决方案)

适用场景:每一种设计模式都有其常见典型的适用场景

代理设计模式

定义

代理模式是为目标对象创建代理对象以提供一种代理机制,让代理对象能控制目标对象的访问,并且可以在不改变目标对象的情况下为目标对象添加额外的功能。

代理模式分类

静态代理:在程序编译期就确定了被代理对象

动态代理:在程序运行期才能确定被代理对象(运用反射机制动态地为目标类创建代理类)(Spring AOP 采用动态代理)

代理模式案例

静态代理:

public interface IDog {
    void bark();
    void run();
}
public class Hiromi implements IDog{
    @Override
    public void bark() {
        System.out.println("博美在叫");
    }

    @Override
    public void run() {
        System.out.println("博美在跑");
    }
}
public class Huskie implements IDog{
    @Override
    public void bark() {
        System.out.println("哈士奇在叫");
    }

    @Override
    public void run() {
        System.out.println("哈士奇在跑");
    }
}
public class DogProxy implements IDog {
    private IDog target;  //被代理对象

    public DogProxy(IDog target) {
        this.target = target;
    }

    @Override
    public void bark() {
        System.out.println("bark 方法开始执行");
        target.bark();
        System.out.println("bark 方法执行结束");
    }

    @Override
    public void run() {
        System.out.println("run 方法开始执行");
        target.bark();
        System.out.println("run 方法结束执行");
    }
}
public class DogProxyTest {
    public static void main(String[] args) {
        DogProxy dogProxy1 = new DogProxy(new Hiromi());
        dogProxy1.bark();
        dogProxy1.run();
        System.out.println("------------");
        DogProxy dogProxy2 = new DogProxy(new Huskie());
        dogProxy2.bark();
        dogProxy2.run();
    }
}

动态代理:

代理模式的优缺点

优点:

  • 代理模式在客户对象和目标对象之间起到一个中介作用和保护目标对象的作用
  • 代理对象可以扩展目标对象的功能
  • 代理模式能将客户对象与目标对象分离,在一定程度上降低了系统的耦合度,增加了程序的可扩展性

缺点:

  • 代理模式会造成系统设计中的类数量增加
  • 在客户对象和目标对象之间增加一个代理对象,会造成请求处理速度变慢
  • 在一定程度增加了系统的复杂度
代理模式使用场景
  • 远程代理:为一个位于不同网络计算机的对象提供一个本地的代理(如本地网盘)
  • 虚拟代理:如果需要创建一个消耗较大的对象,先创建一个消耗较小的对象来表示,真实对象只在需要时才被真实创建(如图片显示)
  • 安全代理:用于控制对真实对象的访问权限,以实现权限管理和安全性
  • 智能指针:主要用于调用目标对象时,代理附加一些额外的处理功能(如GC垃圾回收)
  • 延迟加载:为了提高系统的性能,延迟对目标对象的加载(如MyBatis 的延时加载)

标签:对象,代理,模式,bark,设计模式,public
From: https://www.cnblogs.com/yangcurry/p/18500250

相关文章

  • vite 设置网络代理
    参考文档:vite官网、node-http-proxy完整示例:exportdefaultdefineConfig({server:{proxy:{//字符串简写写法'/foo':'http://localhost:4567',//选项写法'/api':{target:'http://jsonplaceholder.typi......
  • 基于RFC3394标准的AES-128-ECB模式的密钥封装(Key Wrap)和解封(Key Unwrap)
    密钥封装(KeyWrap):RFC3394默认IV为0xA6,0xA6,0xA6,0xA6,0xA6,0xA6,0xA6,0xA6。使用AES_Encrypt函数对IV和密钥数据块进行加密,并将结果与步数异或。经过6n轮迭代后,将最终的IV和加密后的数据块复制到输出的密文中。密钥解封(KeyUnwrap):从输入的密文中提取了IV和加密的......
  • Keepalived+Nginx 高可用(主从模式)
     1.环境说明vipip操作系统nginx端口主从说明192.168.115.150192.168.115.148CentOSLinuxrelease7.6.1810(Core)8443主节点192.168.115.150192.168.115.149CentOSLinuxrelease7.6.1810(Core)8443从节点2台机器都需部署nginx和keealive服务,ngin......
  • AbMole|哺乳动物 DNA 中无碱基位点的复杂基因组模式研究
    DNA损伤在生物学和疾病中起着至关重要的作用,而无碱基(AP)位点作为一种常见的DNA损伤类型,其基因组学特征仍未被充分探索。来自华侨大学医学院基因组学研究所的YeCai,  1HuifenCao,  2FangWang等多名研究人员发表了题为《Complexgenomicpatternsofabasicsitesinm......
  • 川土微一级代理商|内部集成隔离电源的隔离485芯片CA-IS2092W、CA-IS2092VW
    CA-IS2092W、CA-IS2092VW支持多节点数据通信,总线引脚具有±20kVHBMESD保护,可耐受高级别的ESD事件,保护内部电路不受损害。接收器输入阻抗为1/8单位负载,允许同一总线上最多挂接256个收发器。CA-IS2092W、CA-IS2092VW提供DC-DC转换器和RS-485收发器供电独立的版本(CA-IS2092VW),便于逻......
  • 学习高校课程-软件设计模式-工厂模式(lec3)
    FactoryMethod:ProblemExample:alogisticsmanagementapplication示例:物流管理应用程序–Firstversion:handlingtransportationbytrucks,withaTruckclass–Later:newrequeststoincorporatesealogistics,andmore–第一个版本:处理卡车运输,卡车类别–......
  • 绞杀者模式:逐步迁移与替代遗留系统的策略解析
    如果你觉得这篇文章对你有帮助,请不要吝惜你的“关注”、“点赞”、“评价”、“收藏”,你的支持永远是我前进的动力~~~  个人收藏的技术大会分享PDF文档,欢迎点击下载查看!!!在软件工程领域,遗留系统的现代化改造一直是企业面临的挑战之一。本文将介绍一种渐进式的系统迁移策略......
  • 设计模式(六)适配器模式详解
    设计模式(六)适配器模式详解结果型模式:从程序的结构上实现松耦合,从而可以扩大整体的类结构,用来解决更大的问题。适配器模式简介定义:适配器模式是一种结构型模式,它不允许不兼容的接口协同工作。通过创建一个适配器类,将一个类的接口转换成客户端期望的另一个接口。Adapter模式......
  • 设计模式(五)原型模式详解
    设计模式(五)原型模式详解原型模型简介定义:原型模型是一种创建型设计模型,它允许通过克隆/复制现有对象来创建新的对象,而无需通过常规的构造函数进行实例化。这种方式的主要优势是在运行时不需要知道具体的类,只需一个实例对象即可。实现方法实现Cloneable接口:在Java中,如......
  • 群控系统服务端开发模式-程序草图设计
    本系统采用PHP开发,采用thinkphp6作为php应用框架。一、总控制    1、Base.php        a、是否是登录后的验证父类,也就是需要登录才能操作的控制都需要继承他;        b、继承BaseController.php;    2、Emptys.php  ......