生活中的代理

类(对象)代理模式

代理模式是面向对象编程中比较常见的设计模式。

  • 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()));
}
}

java 编程基础 Class对象 反射:代理模式和静态代理的更多相关文章

  1. java 编程基础 Class对象 反射:动态代理 和AOP:java.lang.reflect.Proxy:(Proxy.newProxyInstance(newProxyInstance​(ClassLoader loader, Class<?>[] interfaces, InvocationHandler h))

    为什么我们使用动态代理 静态代理会让类变多了,多了代理类,工作量变大了,且不易扩展.比如我们上节课的例子,要实现不同的扩展方法就要编写不同的代理类,非常麻烦.   Proxy类的使用规则 Proxy提 ...

  2. java 编程基础 Class对象 反射 :获取类的构造方法,方法,成员变量,内部类,外部类,父类,实现的接口,修饰符等...

    类 Class  每个类被加载之后,系统就会为该类生成一个对应的Class对象,通过该Class对象就可以访问到JVM中的这个类. 我们在Java中获取Class对象一般有三种方式: (1), 使用C ...

  3. java 编程基础 Class对象 反射 :参数反射

    方法参数反射 Java8在java.lang.reflect包下新增了Executable抽象基类,该对象代表可执行的类成员,该类派生了Constructor和Method两个子类.Executabl ...

  4. java 编程基础 Class对象 反射 :数组操作java.lang.reflect.Array类

    java.lang.reflect包下还提供了Array类 java.lang.reflect包下还提供了Array类,Array对象可以代表所有的数组.程序可以通过使 Array 来动态地创建数组, ...

  5. java 代理模式(静态代理、动态代理、Cglib代理) 转载

    Java的三种代理模式 1.代理模式 代理(Proxy)是一种设计模式,提供了对目标对象另外的访问方式;即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩 ...

  6. Java三种代理模式:静态代理、动态代理和cglib代理

    一.代理模式介绍 代理模式是一种设计模式,提供了对目标对象额外的访问方式,即通过代理对象访问目标对象,这样可以在不修改原目标对象的前提下,提供额外的功能操作,扩展目标对象的功能. 简言之,代理模式就是 ...

  7. java代理模式之静态代理

    作为一个初级开发者,可能不会接触到代理模式,但是在很多框架的使用中都不知不觉使用了代理模式,比如servlet的过滤器链,spring的AOP,以及spring mvc的拦截器等.所以了解代理模式对于 ...

  8. Spring框架_代理模式(静态代理,动态代理,cglib代理)

    共性问题: 1. 服务器启动报错,什么原因? * jar包缺少.jar包冲突 1) 先检查项目中是否缺少jar包引用 2) 服务器: 检查jar包有没有发布到服务器下:                 ...

  9. 【Java】代理模式,静态代理和动态代理(基于JDK或CGLib)

    当我们需要在一个方法之前或之后添加一段逻辑时,自然会想到使用代理类.代理类帮我们代理了实际类的调用,然后可以在实际调用之前和之后添加一些逻辑,从而不浸入实际类. 拓展:由于代理类能在实际类调用之前和之 ...

随机推荐

  1. springboot静态工具类bean的注入

    工具类中调用数据.但是由于工具类方法一般都写成static,所以直接注入就存在问题. 所以写成了这样: package com.rm.framework.core; import org.spring ...

  2. 多线程07.thread-join

    package com.wangwenjun.concurrency.chapter5; public class ThreadJoin3 { public static void main(Stri ...

  3. CentOS编译openjdk

    编译openjdk 1. 下载openjdk源码 openjdk的官网是OpenJDK (java.net) 在网站左侧就能看到它的源码位置的链接 从图上可以看到,它的源码在两个位置有托管,Mercu ...

  4. Python+selenium 之xpath定位

  5. CF1511E Colorings and Dominoes

    考虑计数拆开贡献. 因为在一个方案中一个格子最多只会贡献一次,那么不妨反过来求这个格子贡献了多少次. 然后发现,行列独立,那么我们单独计算红蓝色,即可. 一个偶数块贡献当且仅当前面也是偶数块. 然后显 ...

  6. pycurl报错: ImportError: pycurl: libcurl link-time ssl backend (openssl) is different from compile-time ssl backend

    报错: ImportError: pycurl: libcurl link-time ssl backend (openssl) is different from compile-time ssl ...

  7. Augustus 进行基因注释

      目前的从头预测软件大多是基于HMM(隐马尔科夫链)和贝叶斯理论,通过已有物种的注释信息对软件进行训练,从训练结果中去推断一段基因序列中可能的结构,在这方面做的最好的工具是AUGUSTUS它可以仅使 ...

  8. acute, adapt

    acute In Euclidean [欧几里得] geometry, an angle is the figure [图形] formed by two rays, called the sides ...

  9. Java实现读取文件

    目录 Java实现读取文件 1.按字节读取文件内容 使用场景 2.按字符读取文件内容 使用场景 3.按行读取文件内容 使用场景 4.随机读取文件内容 使用场景 Java实现读取文件 1.按字节读取文件 ...

  10. 一道题目学ES6 API,合并对象id相同的两个数组对象

    var arr2=[{id:1,name:'23'}] var arr1=[{id:1,car:'car2'}] const combined = arr2.reduce((acc, cur) =&g ...