Java设计模式 | 设计模式内功之静态代理模式

写在前边: 知识分为广度和深度,为了知识不丢失,所以学习多点内功更有利于后续发展,今天分享动态代理模式。

代理模式简介

代理模式,字面上的意思就是代理某个人去做某件事。比如代办证件,可以找代办公司帮忙代理办证。

根据代理的创建时期,代理模式分为静态代理动态代理。

静态代理

静态代理就是由程序员创建代理类或特定工具自动生成源代码再对其编译,在程序运行前代理类的 .class 文件就已经存在的代理。

代理模式的主要角色如下
  1. 抽象主题(IUser)类:通过接口或抽象类声明真实主题和代理对象实现的业务方法
  2. 真实主题(ChineseUser)类:实现了抽象主题中的具体业务,是代理对象所代表的真实对象,是最终要引用的对象
  3. 代理(Translator)类:提供了与真实主题相同的接口,其内部含有对真实主题的引用,它可以访问、控制或扩展真实主题的功能。

例: 翻译官翻译中国人的中文

img
图1 代理模式的结构图

在代码中,一般代理会被理解为代码增强,实际上就是在原代码逻辑前后增加一些代码逻辑,而使调用者无感知。

实现如下:
/**
 * 抽象角色
 *
 * @Author JUNSHI
 * @Create 2022-04-06 17:00
 */
public interface IUser {

    /**
     * 说话
     * @return
     */
    void say();

}
/**
 * 中国人
 *
 * @Author JUNSHI
 * @Create 2022-04-06 17:01
 */
public class ChineseUser implements IUser{

    @Override
    public void say() {
        System.out.println("中国人说了:广东");
    }
}
/**
 * 翻译官:代理对象
 *
 * @Author JUNSHI
 * @Create 2022-04-06 17:03
 */
public class Translator implements IUser {

    private ChineseUser chineseUser =  new ChineseUser();

    @Override
    public void say() {
        // 原角色说话
        chineseUser.say();
        // 翻译官做翻译(代理人实现)
        translate();
    }

    private void translate(){
        System.out.println("翻译官翻译了: GuangDong");
    }

}
/**
 * 代理测试
 *
 * @author JUN
 */
public class ProxyTest {
    public static void main(String[] args) {
        Translator translator = new Translator();
        translator.say();
    }
}

运行结果:

img

文献参考:【代理模式(代理设计模式)详解】

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值