生活中的代理
类(对象)代理模式
代理模式是面向对象编程中比较常见的设计模式。
- 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()));
}
}