当前位置: 首页 > article >正文

【多线程】-- 04 静态代理模式

多线程

3 静态代理

这里以一个现实生活中的例子来解释并实现所谓的静态代理模式,即结婚者雇用婚庆公司来帮助自己完成整个婚礼过程:

package com.duo.lambda;

interface Marry {
    void HappyMarry();
    //人生四大乐事:久旱逢甘霖;他乡遇故知;洞房花烛夜;金榜题名时
}

//结婚主人公
class Protagonist implements Marry {
    @Override
    public void HappyMarry() {
        System.out.println("Protagonist开心地结婚了");
    }
}

//代理婚庆公司
class WeddingCompany implements Marry {
    private final Marry target;

    public WeddingCompany(Marry target) {
        this.target = target;
    }

    @Override
    public void HappyMarry() {
        before();
        this.target.HappyMarry();
        after();
    }
    
    private void before() {
        System.out.println("在结婚之前:布置婚礼现场");
    }

    private void after() {
        System.out.println("在结婚之后:收取剩余尾款");
    }
}

public class StaticProxy {
    public static void main(String[] args) {
        WeddingCompany weddingCompany = new WeddingCompany(new Protagonist());
        weddingCompany.HappyMarry();
    }
}

运行结果:

图1

此外,代码体public class StaticProxy {}中的代码也可以写成:

public class StaticProxy {
    public static void main(String[] args) {
        Protagonist protagonist = new Protagonist();
        WeddingCompany weddingCompany = new WeddingCompany(protagonist);
        weddingCompany.HappyMarry();
    }
}

与之前所学的Thread线程进行对比,是为同理:

public class StaticProxy {
    public static void main(String[] args) {
        new Thread(() -> System.out.println("love")).start();
        new WeddingCompany(new Protagonist()).HappyMarry();
    }
}

【小结】静态代理模式:

  • 真实对象和代理对象都要实现同一个接口
  • 代理对象要代理真实角色

这样做的好处:代理对象可以做很多真实对象做不了的事情;而真实对象可以专注做自己的事情



http://www.kler.cn/a/146553.html

相关文章:

  • 神经网络基础-价格分类案例
  • 【dockerros2】ROS2节点通信:docker容器之间/docker容器与宿主机之间
  • 使用 Charles 调试 Flutter 应用中的 Dio 网络请求
  • 麦田物语学习笔记:构建游戏的时间系统
  • 【leetcode21】344.反转字符串
  • RabbitMQ(三)
  • 蓝桥杯每日一题2023.11.25
  • pop链反序列化 [MRCTF2020]Ezpop1
  • AIGC系列之:Transformer原理及论文解读
  • MacOS “xxxxx“,已损坏,无法打开,你应该将它移到废纸篓
  • 【前沿技术了解】web图形Canvas、svg、WebGL、数据可视化引擎的技术选型
  • 【03】命令行与环境变量
  • MySQL基本SQL语句(上)
  • github国内访问小解(windows)
  • openpnp - 给底部相机加防尘罩
  • mysql常见的十种错误简要说明
  • ElasticSearch02
  • 羊大师:控制血糖,让你的健康更美好
  • 十四、机器学习进阶知识:KNN分类算法
  • @RequestMapping,@GetMapping,@PostMapping 的区别(详解)
  • Linux C语言 24-格式化操作
  • 【spring篇】CJLIB 动态代理
  • 【05】ES6:函数的扩展
  • Android frameworks 开发总结十一
  • 无线网络下VMWare+CentOS7使用桥接模式无法联通网络问题
  • Cache学习(4):Cache分配策略Cache更新策略Cache逐出策略