简述设计模式-代理模式

概述

代理模式:一个类代表另一个类的功能。代理模式通过引入一个代理对象来控制对员对象的访问。

举个例子,就像明星都有经纪公司,商业合作都是直接和经济公司沟通,不会直接和明星沟通。

律师和委托人就是代理关系,律师帮助委托人处理事情,其他人不能直接和委托人沟通。

使用场景及实例

当需要访问一个对象时,对访问进行一些控制或者其他处理。

比如 Spring AOP。

代理模式可以灵活的添加额外的功能和控制。

关键代码

就和经纪人代理明星相同,关键的对象就是经纪人这个代理,以及明星这个实际执行各项工作的人。

除此之外还有明星行为对应的接口,以及实际调用主方法。

区别

和装饰者:装饰者主要用于增强功能,代理模式主要用于控制访问。

实现代码

1. 类图

2. 实际代码

接口

public interface Star {
    void performance();
}

真实实现类

public class RealStar implements Star{
    private String StarName;

    public RealStar(String starName) {
        StarName = starName;
        showStarName(starName);
    }

    @Override
    public void performance() {
        System.out.println("我是"+StarName+",我正在台上表演");

    }
    private void showStarName(String starName){
        System.out.println("showStar:"+starName);
    }
}

代理类

public class ProxyStar implements Star{

    private String StarName;
    private RealStar realStar;

    public ProxyStar(String starName) {
         this.StarName = starName;

    }

    @Override
    public void performance() {
        if(realStar==null){
            realStar=new RealStar(StarName);
        }
        realStar.performance();
    }
}

主类

public class demo {
    public static void main(String[] args) {
        Star proxyStar = new ProxyStar("张三");
        //第一次调用,会先创建对象,然后调用方法
        System.out.println("第一次调用");
        proxyStar.performance();
        //第二次调用就不会再创建对象了,直接调用方法
        System.out.println("第二次调用");
        proxyStar.performance();
    }
}

调用结果

显然,我们是创建的代理类帮助我们创建了对象,而不是自己通过new去创建对象。我们可以在代理类中增加一些其他的功能,比如权限控制,日志记录等。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

分布式技术专题 | TCP在分布式网络中的通信机制与底层实现

深入解析分布式网络中的TCP通信协议实现 跨地域通信与资源共享网络节点与主机的定义网络技术通信机制TCP/IP协议模型TCP/IP分层机制TCP的Socket链接处理控制TCP的优势和特性自动差错控制正确性和有序性 TCP的Socket使用端口在应用程序间通信TCP的Socket使用端口套接字操作 跨地…

解决Python用xpath爬取不到数据的一个思路

前言 最近在学习Python爬虫的知识,既然眼睛会了难免忍不住要实践一把。 不废话直接上主题 代码不复杂,简单的例子奉上: import requests from lxml import etreecookie 浏览器F12网络请求标头里有 user_agent 浏览器F12网络请求标头里有…

Facebook助力中东地区博弈游戏广告营销新视界

Facebook助力中东地区博弈游戏广告营销新视界 中东地区,作为世界上充满活力和潜力的游戏市场之一,近年来,Slots游戏在该地区的热度持续攀升。众多游戏开发商和广告主纷纷寻求有效的推广方式,以吸引更多的潜在用户。在这个过程中&…

Python--进程基础

创建进程 os.fork() 该方法只能在linux和mac os中使用,因为其主要基于系统的fork来实现。window中没有这个方法。 通过os.fork()方法会创建一个子进程,子进程的程序集为该语句下方的所有语句。 import os​​print("主进程的PID为:" , os.g…

如何利用GPT-4o生成有趣的梗图

文章目录 如何利用GPT-4o生成有趣的梗图一、引言二、使用GPT-4o生成梗图1. 提供主题2. 调用工具3. 获取图片实际案例输入输出 三、更多功能1. 创意和灵感2. 梗图知识 四、总结 如何利用GPT-4o生成有趣的梗图 梗图,作为互联网文化的一部分,已经成为了我们…

【轻量化】YOLOv8 更换骨干网络之 MobileNetv4 | 《号称最强轻量化网络》

论文地址:https://arxiv.org/pdf/2404.10518 代码地址:https://github.com/tensorflow/models/blob/master/official/vision/modeling/backbones/mobilenet.py 文章速览 文章摘要 MobileNetV4引入了一个名为Universal Inverted Bottleneck (UIB) 的新搜索模块,这个模块融合…

MCU 是什么?一文了解MCU 产业

MCU(Microcontroller Unit),中文名为“微控制器单元”、“单片微型计算机”。MCU 将中央处理器(CPU)、内存(RAM)、输入 / 输出界面(I/O)等等一大堆东西,全部整…

kafka的架构

一、架构图 Broker:一台 kafka 服务器就是一个 broker。一个kakfa集群由多个 broker 组成。一个 broker 可以容纳多个 topic。 Producer:消息生产者,就是向 kafka broker 发消息的客户端 Consumer:消息消费者,向 kafk…

Charles抓包工具踩坑记录

请添加图片描述 Charles抓包工具 证书问题 输入网址:chls.pro/ssl 第一个下载证书网址,会出现一直加载不出来,无法下载证书的情况 解决:选择下面save Charles Root。。。 2 证书在mac中禁止修改问题 解决也很简单,按照…

基于ESP32 IDF的WebServer实现以及OTA固件升级实现记录(三)

经过前面两篇的前序铺垫,对webserver以及restful api架构有了大体了解后本篇描述下最终的ota实现的代码以及调试中遇到的诡异bug。 eps32的实际ota实现过程其实esp32官方都已经基本实现好了,我们要做到无非就是把要升级的固件搬运到对应ota flash分区里面…

自定义动态数据源+事务控制

1:首先yml配置两个数据库的链接 spring:application:name: xxxxmain:banner-mode: OFFdatasource: # 默认数据源 datamarkdruid: # 关闭数据库的 web 访问stat-view-servlet:enabled: falseweb-stat-filter:enabled: falsefilt…

巴比达内网穿透:深度剖析其在解决远程连接挑战中的技术优势

在信息技术日新月异的今天,远程协作与管理的需求日益增长,但内网环境的隔离性一直是横亘在高效远程操作面前的一道坎。本文将深入探讨一款专为打破此壁垒而生的工具——巴比达内网穿透,如何以其技术创新和高效性能,成为解决远程连…

electron-builder 打包过慢解决

报错内容如下 > 6-241.0.0 build > electron-builder • electron-builder version24.13.3 os10.0.22631 • loaded configuration filepackage.json ("build" field) • writing effective config filedist\builder-effective-config.yaml • pack…

【Linux详解】进程地址空间

目录 研究背景 验证地址空间 实验一:父子进程变量地址一致性 实验二:变量值修改后父子进程的差异 分析与结论 实验三:进程地址空间验证 理解进程地址空间 区域与页表 写时拷贝机制 进程地址空间的意义 文章手稿: xmind…

7月信用卡新规下:信用卡欠的钱不用还了?

说到信用卡,现在基本上人手一张,大家都有使用过。但你知道吗,使用信用卡不是这么简单容易的事,比如会对你的贷款有影响,透支不还逾期对生活的影响,信用卡新规对持卡人和银行那边的影响。 一、只要不逾期&am…

hamibot 学习

1.参考文档: https://blog.csdn.net/zxl0428/article/details/1285318731.参考官网 快速入手步骤:注册,安装客户端,添加设备,开发脚本,运行脚本 https://hamibot.com/guide1.安装客户端 2.添加设备 …

高通骁龙(Qualcomm Snapdragon)CDSP HVX HTP 芯片简介与开发入门

1. Hexagon DSP/HVX/HTP 硬件演进 说到高通骁龙芯片大家应该不会陌生,其作为最为广泛的移动处理器之一,几乎每一个品牌的智能手机都会使用高通骁龙的处理器。 高通提供了一系列骁龙芯片解决方案。根据性能强弱分为了5个产品系列:从最高端的…

【neo4j图数据库】入门实践篇

探索数据之间的奥秘:Neo4j图数据库引领新纪元 在数字化浪潮汹涌的今天,数据已成为企业最宝贵的资产之一。然而,随着数据量的爆炸性增长和数据关系的日益复杂,传统的关系型数据库在处理诸如社交网络、推荐系统、生物信息学等高度互…

OPCUA相关概念和KepServer OPCUA连接PLC

文章背景 项目中需要使用OPC UA 来读取PLC的点位。本文简单介绍了OPC UA和使用KepServer软件连接PLC并读点。OPC相关概念 OPC之前,软件开发需要写大量驱动程序去连接设备,设备上的一个硬件改变,应用程序都有可能需要重写,不同设备…

水经微图Web版1.9.0发布

水经微图(简称“微图”)新版已上线,在该版本中主要新增了对WGS84图源加载、火星坐标图源加载和大字体图源加载功能,以及多面要素的加载功能。 现在,为你分享一下本轮迭代的主要新增功能,以及部分功能的效果…