zoukankan      html  css  js  c++  java
  • 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()));
        }
    }
  • 相关阅读:
    fork子进程
    多输入使用多线程
    多输入select
    多输入之轮询
    开启telnet
    slickedit编译调试linux应用程序
    电子书框架
    通用Makefile
    STDIN_FILENO和stdin
    libiconv交叉编译提示arm-none-linux-gnueabi-gcc
  • 原文地址:https://www.cnblogs.com/zhangmingda/p/14774921.html
Copyright © 2011-2022 走看看