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("访问真实主题之后的后续处理。");
        }
    }
  • 相关阅读:
    linux c编程:Posix消息队列
    go语言之接口二
    linux c编程:FIFO
    python cookbook第三版学习笔记十九:未包装的函数添加参数
    linux c编程:popen
    linux c编程:管道
    Linux c编程:I/O多路复用之epoll
    Linux c编程:I/O多路复用之select
    inux c编程:记录锁
    python cookbook第三版学习笔记十八:可由用户修改的装饰器
  • 原文地址:https://www.cnblogs.com/huiy/p/15557187.html
Copyright © 2011-2022 走看看