• 代理模式


    代理模式

    为其他对象提供一种代理以控制对这个对象的访问。

    在一些情况下客户不想或者不能直接引用一个对象,而代理对象可以在客户和目标对象之间起到中介作用,去掉客户不能看到的内容和服务或者增添客户需要的额外服务。

    什么时候要使用代理模式呢?

    在对已有的方法进行使用的时候出现需要对原有方法进行改进或者修改,这时候有两种改进选择: 修改原有方法来适应现在的使用方式, 或者使用一个‘第三者’方法来调用原有的方法并且对方法产生的结果进行一定的控制。

    第一种方法是明显违背了‘对扩展开放、对修改关闭’(开闭原则),而且在原来方法中作修改可能使得原来类的功能变得模糊和多元化, 而使用第二种方式可以将功能划分的更加清晰,有助于后面的维护。所以在一定程度上第二种方式是一个比较好的选择! 当然,话又说回来了,如果是一个很小的系统,功能也不是很繁杂,那么使用代理模式可能就显得臃肿,不如第一种方式来的快捷。

    代理模式的角色

    抽象角色(Subject):声明真实对象和代理对象的共同接口;

    真实角色(ProxySubject):代理对象角色内部含有对真实对象的引用,从而可以操作真实对象,同时代理对象提供与真实对象相同的接口以便在任何时刻都能代替真实对象。同时,代理对象可以在执行真实对象操作时,附加其他的操作,相当于对真实对象进行封装。

    代理角色(RealSubject):代理角色所代表的真实对象,是我们最终要引用的对象。

    示例:

    abstract public class Subject {
        abstract public void request();
    }
    public class RealSubject {
    
        public RealSubject() {
        }
    
        public void request() {
            System.out.println("From real subject.");
        }
    }
    public class ProxySubject extends Subject {
    
        private RealSubject realSubject; //以真实角色作为代理角色的属性
    
        public ProxySubject() {
        }
    
        public void request() //该方法封装了真实对象的request方法
        {
            preRequest();
            if (realSubject == null) {
                realSubject = new RealSubject();
            }
            realSubject.request(); //此处执行真实对象的request方法
            postRequest();
        }
    
        private void preRequest() {//something you want to do before requesting
        }
    
        private void postRequest() {//something you want to do after requesting
        }
    }
    public class MainTest {
    
        public static void main(String[] args) {
            Subject sub = new ProxySubject();
            sub.request();
        }
    }

    参考:大话设计模式:面向对象程序设计23种常见设计模式通俗演义 11

  • 相关阅读:
    layui学习
    网络安装Centos x64 6.10
    给没有连接因特网的centos使用yum安装其他软件。
    Java使用线程池
    记录一次查看后台是否在运行资源备份上报到华为云存储的过程
    潭州课堂python
    什么是动态规划?动态规划的意义是什么?
    南明区教师信息管理系统之审批流程设计思路
    连接慢的主要原因是DNS解析导致
    jfinal中,render的时候如何取到view根目录
  • 原文地址:https://www.cnblogs.com/ooo0/p/12176287.html
Copyright © 2020-2023  润新知