代理模式

简介: 代理模式

AOP的底层就是代理模式

静态代理

角色分析:

抽象角色:一般会使用接口或者抽象类l来解决

真实角色:被代理的角色

代理角色:代理真实角色,代理之后一般会做一些附属操作

客户:访问代理对象的人

代码步骤:
1.接口

//租房
public interface Rent {

public void rent();

}
2.真实角色

//房东
public class Host implements Rent {

@Override
public void rent() {
    System.out.println("房东出租房子");
}

}

3.代理角色

public class Proxy implements Rent{

private Host host;

public Proxy() {
}

public Proxy(Host host) {
    this.host = host;
}

@Override
public void rent() {
    host.rent();
    hetong();
    seeHouse();
}

//看房
public void seeHouse(){
    System.out.println("中介带你看房");
}

//签合同
public void hetong(){
    System.out.println("中介带你签合同");
}

}

4.客户端访问代理角色

public class Client {

@Test
public void test01(){
    //房东租房子
    Host host = new Host();
    //代理,中介帮房东租房子,但是代理角色一般会有一些附属操作
    Proxy proxy = new Proxy(host);

    //客户不用面对房东直接找中介即可
    proxy.rent();
}

}

静态代理模式好处:
可以使真实角色的操作更加纯粹,不用去关注一些公共的业务
公共交给代理角色,实现了业务的分工
公共业务发生扩展的时候,方便集中管理

缺点:
一个真实角色就会产生一个代理角色,代码量会翻倍,开发效率变低

动态代理:
动态代理和静态代理角色一样
动态代理的代理类是动态生成的,不是直接写好的
动态代理分为两大类:基于接口的动态代理,基于类的动态代理

基于接口—JDK动态代理
基于类:cglib
java字节码实现:javasist

需要了解两个类:Proxy:代理,InvocationHandler:调用处理程序

动态代理的好处:
可以使真实角色的操作更加纯粹,不用去关注一些公共的业务
公共交给代理角色,实现了业务的分工
公共业务发生扩展的时候,方便集中管理
一个动态代理类代理的是一个接口,一般就是对应的一类业务

目录
相关文章
|
JSON 安全 Linux
安全工具-curl学习
安全工具-curl学习
181 0
|
11月前
|
中间件 PHP 调度
深入浅出PHP框架之Laravel的优雅
【10月更文挑战第3天】在PHP的世界里,Laravel以其优雅和简洁闻名。本文将带你走进Laravel的世界,探索它的魔法。我们将通过代码示例,一步步揭示Laravel的魅力。准备好,让我们一起开始这场奇妙的旅程吧!
|
机器学习/深度学习 人工智能 数据管理
文生图的基石CLIP模型的发展综述
CLIP(Contrastive Language-Image Pre-training)是OpenAI在2021年发布的多模态模型,用于学习文本-图像对的匹配。模型由文本和图像编码器组成,通过对比学习使匹配的输入对在向量空间中靠近,非匹配对远离。预训练后,CLIP被广泛应用于各种任务,如零样本分类和语义搜索。后续研究包括ALIGN、K-LITE、OpenCLIP、MetaCLIP和DFN,它们分别在数据规模、知识增强、性能缩放和数据过滤等方面进行了改进和扩展,促进了多模态AI的发展。
2093 0
|
SQL 存储 关系型数据库
nacos安装教程
nacos安装教程
916 0
nacos安装教程
|
Rust 数据可视化 C++
WASM性能分析-插桩方案
本文结合了代码插桩和性能火焰图的技术,以 WebAssembly 为例介绍了性能分析的方法和相关实现。
406 13
|
Prometheus 监控 Cloud Native
基于Prometheus和Grafana的监控平台 - 环境搭建
基于Prometheus和Grafana的监控平台 - 环境搭建
|
5月前
|
运维 安全 Cloud Native
汇聚开源工具的价值:Websoft9助您轻松选择中小企业数字化方案
在数字化转型中,中小企业常因技术选型复杂、成本高和运维难度大而受阻。开源技术以灵活性与成本优势成为解决方案的核心选项。本文探讨Websoft9如何整合开源生态,提供标准化、场景化的数字化方案。内容涵盖技术选型(科学匹配工具)、云原生部署架构、自动化运维管理、安全合规保障及实际案例分析,助力企业实现高效、可持续的数字化升级。
|
存储 缓存 Unix
【进程IO】详细讲解文件描述符fd
【进程IO】详细讲解文件描述符fd
|
算法 Java 测试技术
深入解析白盒测试:提升软件质量与效率的关键
【4月更文挑战第22天】 在软件开发的复杂多变的世界中,保证代码质量和功能的正确性是至关重要的。白盒测试作为一种重要的软件测试方法,提供了一种透视软件内部逻辑结构的途径。本文将详细探讨白盒测试的概念、技术手段和实际应用,旨在帮助读者理解如何通过这种测试提高软件系统的稳定性和性能。文章还将讨论白盒测试中面临的挑战以及应对策略,以期为软件质量保证提供实用的指导。
624 2
|
存储 架构师 算法
架构设计的本质:系统与子系统、模块与组件、框架与架构
在软件研发这个领域,程序员的终极目标都是想成为一名合格的架构师。然而梦想很美好,但现实却很曲折。
架构设计的本质:系统与子系统、模块与组件、框架与架构

热门文章

最新文章