java 编程基础 Class对象 反射:代理模式和静态代理

生活中的代理

 

 类(对象)代理模式

代理模式是面向对象编程中比较常见的设计模式。
  • 1. 用户只关心接口功能,而不在乎谁提供了功能。上图中接口是 Subject
  • 2. 接口真正实现者是上图的 RealSubject,但是它不与用户直接接触,而是通过代理。
  • 3. 代理就是上图中的 Proxy,由于它实现了Subject接口,所以它能够直接与用户接触。
  • 4. 用户调用 Proxy 的时候,Proxy 内部调用了 RealSubject。所以,Proxy 是中介者,它可以增强 RealSubject 操作。

静态代理模式

使用播放电影案例说明

用户--->加广告的电影(电影)--->真正的电影(电影接口) 

1,定义一个电影接口

复制代码
package com.zmd.staticProxy;

/**
 * @ClassName Movie
 * @projectName: object1
 * @author: Zhangmingda
 * @description: XXX
 * date: 2021/5/16.
 */
public interface Movie {
    /**
     * 接口中定义的方法,认都是public (公开)、abstract  (抽象) 的
     * 播放电影的方法:
     */
    void play();
}
复制代码

2,定义真的电影《战狼》实现Movie接口

package com.zmd.staticProxy;

public class ZhanlangMovie implements Movie{
    public void play(){
        System.out.println("战狼播放中...");
    }
}

3,定义加广告的电影(电影城加工后),实现接Movie口

复制代码
package com.zmd.staticProxy;

public class RealMovie implements Movie{
    private Movie movie;

    public RealMovie(Movie movie) {
        this.movie = movie;
    }

    public void play(){
        System.out.println(" 欢迎 购买爆米花 ,电影要开始喽...");
        movie.play();
        System.out.println("下期 《反贪风暴》 即将开播,敬请期待");
    }
}
复制代码

4,定义播放器,播放电影

复制代码
package com.zmd.staticProxy;

public class MovieTest {

    public static void playMovie(Movie movie){
        movie.play();
    }
    public static void main(String[] args) {
        playMovie(new RealMovie(new ZhanlangMovie()));
    }
}
复制代码

 

posted on   zhangmingda  阅读(65)  评论(0编辑  收藏  举报

编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
历史上的今天:
2018-05-16 python3 内置方法 字符串转换为字典
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示