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()));
}
}
java 编程基础 Class对象 反射:代理模式和静态代理的更多相关文章
- java 编程基础 Class对象 反射:动态代理 和AOP:java.lang.reflect.Proxy:(Proxy.newProxyInstance(newProxyInstance(ClassLoader loader, Class<?>[] interfaces, InvocationHandler h))
为什么我们使用动态代理 静态代理会让类变多了,多了代理类,工作量变大了,且不易扩展.比如我们上节课的例子,要实现不同的扩展方法就要编写不同的代理类,非常麻烦. Proxy类的使用规则 Proxy提 ...
- java 编程基础 Class对象 反射 :获取类的构造方法,方法,成员变量,内部类,外部类,父类,实现的接口,修饰符等...
类 Class 每个类被加载之后,系统就会为该类生成一个对应的Class对象,通过该Class对象就可以访问到JVM中的这个类. 我们在Java中获取Class对象一般有三种方式: (1), 使用C ...
- java 编程基础 Class对象 反射 :参数反射
方法参数反射 Java8在java.lang.reflect包下新增了Executable抽象基类,该对象代表可执行的类成员,该类派生了Constructor和Method两个子类.Executabl ...
- java 编程基础 Class对象 反射 :数组操作java.lang.reflect.Array类
java.lang.reflect包下还提供了Array类 java.lang.reflect包下还提供了Array类,Array对象可以代表所有的数组.程序可以通过使 Array 来动态地创建数组, ...
- java 代理模式(静态代理、动态代理、Cglib代理) 转载
Java的三种代理模式 1.代理模式 代理(Proxy)是一种设计模式,提供了对目标对象另外的访问方式;即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩 ...
- Java三种代理模式:静态代理、动态代理和cglib代理
一.代理模式介绍 代理模式是一种设计模式,提供了对目标对象额外的访问方式,即通过代理对象访问目标对象,这样可以在不修改原目标对象的前提下,提供额外的功能操作,扩展目标对象的功能. 简言之,代理模式就是 ...
- java代理模式之静态代理
作为一个初级开发者,可能不会接触到代理模式,但是在很多框架的使用中都不知不觉使用了代理模式,比如servlet的过滤器链,spring的AOP,以及spring mvc的拦截器等.所以了解代理模式对于 ...
- Spring框架_代理模式(静态代理,动态代理,cglib代理)
共性问题: 1. 服务器启动报错,什么原因? * jar包缺少.jar包冲突 1) 先检查项目中是否缺少jar包引用 2) 服务器: 检查jar包有没有发布到服务器下: ...
- 【Java】代理模式,静态代理和动态代理(基于JDK或CGLib)
当我们需要在一个方法之前或之后添加一段逻辑时,自然会想到使用代理类.代理类帮我们代理了实际类的调用,然后可以在实际调用之前和之后添加一些逻辑,从而不浸入实际类. 拓展:由于代理类能在实际类调用之前和之 ...
随机推荐
- springboot启动流程1
public SpringApplication(ResourceLoader resourceLoader, Class<?>... primarySources) { this.res ...
- DVWA总结
Brute Force,即暴力(破解),是指黑客利用密码字典,使用穷举法猜解出用户口令,是现在最为广泛使用的攻击手法之一,如2014年轰动全国的12306"撞库"事件,实质就是暴力 ...
- 洛谷 P2791 - 幼儿园篮球题(第二类斯特林数)
题面传送门 首先写出式子: \[ans=\sum\limits_{i=0}^m\dbinom{m}{i}\dbinom{n-m}{k-i}·i^L \] 看到后面有个幂,我们看它不爽,因此考虑将其拆开 ...
- Linux内网时钟同步问题(ntp和chrony)
我们都知道时钟同步可以使用外网服务器,在内网内不能连接外网的时候也需要时钟同步,那怎么进行呢? 选择内网的一台稳定的服务器作为时钟源,然后让其他机器都来同步这台机器即可. 注:其实ntp服务和chro ...
- MySQL-数据库多表关联查询太慢,如何进行SQL语句优化
工作中我们经常用到多个left join去关联其他表查询结果,但是随着数据量的增加,一个表的数据达到百万级别后,这种普通的left join查询将非常的耗时. 举个例子: 现在porder表有 10 ...
- 外网无法访问hdfs文件系统
由于本地测试和服务器不在一个局域网,安装的hadoop配置文件是以内网ip作为机器间通信的ip. 在这种情况下,我们能够访问到namenode机器, namenode会给我们数据所在机器的ip地址供我 ...
- applogs流量数据项目学习
一. 项目介绍 项目的功能主要是面向App开发商提供App使用情况的统计服务 主要是基于用户启动app的统计分析,app只要启动就会上报一条日志记录 (启动日志),当然也会有其他的日志比如说页面访问日 ...
- 一份不错的Java就业指导
想要成为合格的Java程序员或工程师到底需要具备哪些专业技能,面试者在面试之前到底需要准备哪些东西呢? 本文陈列的这些内容既可以作为个人简历中的内容,也可以作为面试的时候跟面试官聊的东西,你可以把这些 ...
- 【Linux】【Services】【VersionControl】git-daemon, httpd, mysql搭建带认证的gitserver
1. 简介: 比较低端的gitserver,使用centos自带的git-daemon搭建gitserver,使用httpd做上传和下载,利用mod_auth_mysql做认证 2. 环境 # Apa ...
- redis入门到精通系列(六):redis的事务详解
(一)事务的概念 谈到数据库的高级应用,不可避免会谈到事务.熟悉mysql的朋友们对事务肯定不陌生,简单来讲事务就是控制一个数据库操作序列要么全部执行要么全部不执行.今天我们就来了解redis中的事务 ...