• 代理模式【java版】


    应用场景:
           安全代理:控制对原对象的访问权限
                    注: 之所以把权限控制放在"代理类"中,而不是放在原对象中,主要依据"单一性原则".
           远程代理:网络通讯时,将加密,解密,打包,解包这些操作一起封装在"代理对象"使得客户端
                      调用时,就像是在访问本地数据.
                      eg: WebService的工作原理
           虚拟代理:当存在实例化需要很长时间的成员对象时,当需要调用到与该对象相关的方法时才
                      声明该对象,并实例化.
           智能指引:未使用过

    基本特点: 代理拥有实际执行者的实例,代理的每一个函数,直接调用实际执行者对应的函数.

    一、普通代理:

           (安全代理)

           1.原始接口

    //原始类方法接口
    public interface Subject {
    public void readFile(String fileName);
    public void writeFile(String fileName);
    }

           2.原始类

    //原始类:实现原始接口中的方法
    public class RealSubject implements Subject {

    public void readFile(String fileName) {
    System.out.println("进行读取文件操作!");

    }

    public void writeFile(String fileName) {
    System.out.println("进行文件写入操作!");

    }

    }

           3.代理类

    public class Proxy implements Subject {
    private Subject subject;
    private boolean isReadable;
    private boolean isWriteable;
    //创建“代理对象”时,传入权限参数
    public Proxy(Subject subject,boolean isReadable,boolean isWriteable) {
    this.subject=subject;
    this.isReadable=isReadable;
    this.isWriteable=isWriteable;
    }

    public void readFile(String fileName) {
    if(isReadable){
    subject.readFile(fileName);
    }else{
    System.out.println("对不起,您没有文件读取权限!");
    }

    }

    public void writeFile(String fileName) {
    if(isWriteable){
    subject.writeFile(fileName);
    }else{
    System.out.println("对不起,您没有写文件权限!");
    }

    }

    }

           4.测试

           测试代码:

    public class Main {

    public static void main(String[] args) {
    System.out.println("开始测试代理模式。。。");
    System.out.println();

    Proxy theProxy=new Proxy(new RealSubject(),true,false);

    theProxy.readFile(new String("mytext"));
    theProxy.writeFile(new String("mytext"));

    }

    }

           运行结果:


    二、动态代理

    三、代理模式与适配器模式,装饰模式的比较

        代理模式:   接口不变
        适配器模式: 接口改变
        
        代理模式: 控制对象的访问
        装饰者模式:动态多次添加装饰

        相同点:都封装对象
        不同点:
               代理模式:不改变外部调用的接口,只是原来对象的一个替身,控制对象,外界必须通过

                           代理才能使用被封装的对象.
               装饰模式:不改变外部调用的接口,通过新增私有方法对原接口功能进行增强
               适配器模式:改变外部调用的接口

  • 相关阅读:
    几种常见的软件体系结构及特点分析
    mvc模式
    代理模式 补充
    软件架构体系风格
    大道至简之编程的精义读后感-Java伪代码
    MVC架构模式实例
    浅谈模型-视图-控制器模式
    《大型网站技术架构:核心原理与案例分析》读后感
    质量属性分析
    构架漫谈读后感之软件架构师的工作
  • 原文地址:https://www.cnblogs.com/edisonfeng/p/2307726.html
Copyright © 2020-2023  润新知