首页 > 其他分享 >23种设计模式之代理模式

23种设计模式之代理模式

时间:2024-06-10 22:28:32浏览次数:24  
标签:23 主题 System 代理 println 设计模式 public out

代理模式

1、概念

代理模式:给某一个对象提供一个代理或占位符,并由代理对象来控制对原对象的访问

代理模式是常用的结构型设计模式之一,在Java RMI、Web Service、Spring AOP等技术和框架中都使用了代理模式

2、代理模式结构

  • Subject(抽象主题角色):它声明了真实主题和代理主题的共同接口,这样一来在任何使用真实主题的地方都可以使用代理主题
  • Proxy(代理主题角色):它包含了对真实主题的引用,从而可以在任何时候操作真实主题对象。通常,在代理主题角色中客户端在调用所引用的真实主题操作之前或之后还需要执行其他操作,而不仅仅是单纯调用真实主题对象中的操作。
  • RealSubject(真实主题角色):它定义了代理角色所代表的真实对象。

代理模式结构图

3、示例

Subject 创建Object接口

public interface Object {
    void action();
}

RealSubject 创建ObjectImpl类实现Object

public class ObjectImpl implements Object{
    @Override
    public void action() {
        System.out.println("========");
        System.out.println("========");
        System.out.println("这是被代理的类");
        System.out.println("========");
        System.out.println("========");
    }
}

Proxy 创建ProxyObject

public class ProxyObject implements Object {

    private Object obj;

    public ProxyObject() {
        System.out.println("这是代理类");
        obj = new ObjectImpl();
    }

    @Override
    public void action() {
        System.out.println("代理开始");
        obj.action();
        System.out.println("代理结束");
    }
}

创建测试类

public class Client {
    public static void main(String[] args) {
        ProxyObject proxyObject = new ProxyObject();
        proxyObject.action();
    }
}

运行结果

这是代理类
代理开始
========
========
这是被代理的类
========
========
代理结束

4、代理模式的优缺点

4.1优点
  • 能够协调调用者和被调用者,在一定程度上降低了系统的耦合度
  • 客户端可以针对抽象主题角色进行编程,增加和更换代理类无须修改源代码,符合开闭原则,系统具有较好的灵活性和可扩展性
4.2缺点
  • 有些类型的代理模式可能会造成处理速度变慢,例如保护模式
  • 实现代理模式需要额外的工作,有些代理模式的实现过程较为复杂

5、代理模式适用模式

1.远程代理(RemoteProxy)为一个对象在不同的地址空间提供局部代表。

2.虚代理(VirtualProxy)根据需要创建开销很大的对象。

3.保护代理(ProtectionProxy)控制对原始对象的访问。

4.智能指引(SmartReference)取代了简单的指针,它在访问对象时执行一些附加操作。

标签:23,主题,System,代理,println,设计模式,public,out
From: https://blog.csdn.net/qq_38811830/article/details/139565297

相关文章

  • Q23 LeetCode242 字母异位词
    1.先进行简单的字符长度判断,不相等直接返回false;2.containsKey()的使用3.在减减循环14-17行里判别key的value是否为0,要不然会报错 1classSolution{2publicbooleanisAnagram(Strings,Stringt){3if(s.length()!=t.length()){4return......
  • 【设计模式】结构型-桥接模式
    当抽象与实现,各自独立,桥接模式,如彩虹桥,连接两岸。文章目录一、类爆炸与代码重复二、桥接模式三、桥接模式的核心组成四、运用桥接模式五、桥接模式的应用场景六、小结推荐阅读一、类爆炸与代码重复场景假设:假设我们正在设计一个模拟城市交通的系统。在这个系统中,......
  • Leetcode 力扣114. 二叉树展开为链表 (抖音号:708231408)
    给你二叉树的根结点 root ,请你将它展开为一个单链表:展开后的单链表应该同样使用 TreeNode ,其中 right 子指针指向链表中下一个结点,而左子指针始终为 null 。展开后的单链表应该与二叉树 先序遍历 顺序相同。示例1:输入:root=[1,2,5,3,4,null,6]输出:[1,null,2......
  • Python魔法之旅-魔法方法(23)
    目录一、概述1、定义2、作用二、应用场景1、构造和析构2、操作符重载3、字符串和表示4、容器管理5、可调用对象6、上下文管理7、属性访问和描述符8、迭代器和生成器9、数值类型10、复制和序列化11、自定义元类行为12、自定义类行为13、类型检查和转换14、自......
  • Java中的动态代理机制及其应用
    动态代理(DynamicProxy)是Java语言中一种强大的特性,允许在运行时动态地创建代理类。代理类可以拦截对目标对象的所有方法调用,并在调用前后执行一些额外的逻辑。动态代理在Java的许多框架中得到了广泛应用,比如SpringAOP(面向切面编程)、Hibernate、MyBatis等。本文将介绍Java中......
  • 设计模式之命令模式
    文章目录概述原理命令模式实现其他案例命令模式优缺点小结概述先来个定义,如下:命令模式(commandpattern)的定义:命令模式将请求(命令)封装为一个对象,这样可以使用不同的请求参数化其他对象(将不同请求依赖注入到其他对象),并且能够支持请求(命令)的排队执行、记录日志、......
  • JDK23新特性:通过原始类型模式提升代码编写效率
    在JEP455中包含了通过增强switch语句,简化了代码编写,以及提高了代码的可读性。1.相关优化原始类型模式:您可以int,long,boolean在模式匹配结构中直接使用原始类型(例如等)。这样就无需对值进行不必要的装箱和拆箱。扩展的instanceof和switch:运算instanceof符和switch表达......
  • 23201826-熊锋-第二次blog
    一.前言这三次pta作业第一次为答题判断程序-4,这是答题判断程序的第三次迭代,相较于答题判断三,新增了各种题型及其不同种类的答案,并且出现多选题,使得这次题目相当棘手,具有很大的挑战性。第二次为家居强电电路模拟程序-1,这次是新题型,这道题难点在于电器之间的连接,电路是否为通路,电器......
  • 123
    packagemainimport( "testing" "github.com/hyperledger/fabric/core/chaincode/shim" "fmt")funccheckInit(t*testing.T,stub*shim.MockStub,args[][]byte){ res:=stub.MockInit("1",args) ifres.Status......
  • 【二分答案】P2390 地标访问
    \(\color{black}\text{P2390地标访问(传送门)}\)学过区间DP的,看到这题的第一反应都是:访问的地标一定是一个区间,并且在不断扩大,区间DP!可看到数据范围,又瞬间放弃了。与P1220关路灯不同,这题由于没有电量的消耗等额外因素,有这样一个小性质:贝西的行走路线只可能是三种:一路向......