zoukankan      html  css  js  c++  java
  • 代理模式 (学习笔记7)

    原文:http://c.biancheng.net/view/1359.html

    什么时候用:

    1. 只想使用主接口的特定功能,且不想暴露主接口。
    2. 在满足基本功能的基础上,可以加以扩展,并不涉及主接口的变动

    代理模式分为静态代理和动态代理。

    • 静态:由程序员创建代理类或特定工具自动生成源代码再对其编译,在程序运行前代理类的 .class 文件就已经存在了。
    • 动态:在程序运行时,运用反射机制动态创建而成

    主要角色如下:

    1. 抽象主题(Subject)类:通过接口或抽象类声明真实主题和代理对象实现的业务方法。
    2. 真实主题(Real Subject)类:实现了抽象主题中的具体业务,是代理对象所代表的真实对象,是最终要引用的对象。
    3. 代理(Proxy)类:提供了与真实主题相同的接口,其内部含有对真实主题的引用,它可以访问、控制或扩展真实主题的功能。

    结构图:

    image

    示例代码:

    package proxy;
    
    public class ProxyTest {
        public static void main(String[] args) {
            Proxy proxy = new Proxy();
            proxy.Request();
        }
    }
    
    //抽象主题
    interface Subject {
        void Request();
    }
    
    //真实主题
    class RealSubject implements Subject {
        public void Request() {
            System.out.println("访问真实主题方法...");
        }
    }
    
    //代理
    class Proxy implements Subject {
        private RealSubject realSubject;
    
        public void Request() {
            if (realSubject == null) {
                realSubject = new RealSubject();
            }
            preRequest();
            realSubject.Request();
            postRequest();
        }
    
        public void preRequest() {
            System.out.println("访问真实主题之前的预处理。");
        }
    
        public void postRequest() {
            System.out.println("访问真实主题之后的后续处理。");
        }
    }
  • 相关阅读:
    django修身大法之一阳指
    django修身大法之归天心法
    事务(转账功能)
    el技术,,,,,JSTL技术,,,,,javaEE的开发模式
    DBUtils
    Jquery的Ajax
    实例_一个CSS开门动画
    js_快速判断浏览器是否是IE9以下版本浏览器
    html5_通过网页添加QQ或者加入QQ群
    html5_video&audio的autoplay属性失效的解决方法
  • 原文地址:https://www.cnblogs.com/huiy/p/15557187.html
Copyright © 2011-2022 走看看