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