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()));
    }
}
原文地址:https://www.cnblogs.com/zhangmingda/p/14774921.html