zoukankan      html  css  js  c++  java
  • 设计模式代理

    代理模式



    设计原则:体现功能复用
    常用场景:需要修改或屏蔽某一个或若干个类的部分功能,复用另外一部分功能,可使用静态代理,若是需要拦截一批类中的某些方法,在方法的前后插入一些一致的操作,假设这些类有一致的接口,可使用JDK的动态代理,否则可使用cglib
    使用概率:99.99999%
    复杂度:中高
    变化点:静态代理没有变化点,动态代理的变化点为具有相同切入点的类
    选择关键点:静态代理选择的关键点是是否要复用被代理的部分功能,动态代理选择的关键点在于能否在将被代理的这一批类当中,找出相同的切入点
    逆鳞:切入点的不稳定
    相关设计模式
    适配器模式:对于适配器模式当中的定制适配器,它与静态代理有着相似的部分,
    二者都有复用功能的作用,不同的是,静态代理会修改一部分原有的功能,而适配器往往是全部复用,而且在复用的同时,适配器还会将复用的类适配一个接口


    主要思想
    创建代理类继承或实现 需要被代理类相同的父类或接口
    持有被代理类实例
    调用被代理类方法在前后可增加功能

    装饰模式,理论上装饰模式不控制持有的对象,只是增加一些装饰
    代理模式,理论上被代理类是不可直接用的,持有代理对象,可控制其执行与否




    public interface MyInterface {
        public void do1();
        public void do2();
    }
    
    
    public class MyClass implements MyInterface {
        @Override
        public void do1() {
            System.out.println("my do1");
        }
    
        @Override
        public void do2() {
            System.out.println("my do2");
        }
    }
    
    
    public class MyProxy implements MyInterface {
    
        private MyInterface myInterface;
    
        public MyProxy(MyInterface myInterface) {
            this.myInterface = myInterface;
        }
    
        @Override
        public void do1() {
            System.out.println("代理前1");
            myInterface.do1();
            System.out.println("代理后1");
        }
    
        @Override
        public void do2() {
            System.out.println("代理前2");
            //可以选择不执行   具有自主控制权
            //myInterface.do2();
            System.out.println("代理后2");
        }
    }
  • 相关阅读:
    vue打包配置发布路径
    qt编程参考资料
    qt下载地址
    树结构遍历节点名字提取,这里提取的是el-tree数据结构,封装成函数
    set实现数组去重后是对象,这里转化为数组
    js中的async await
    微信小程序调微信支付
    Http权威指南(TCP连接)
    Http权威指南(报文)
    Http权威指南(概述篇总结)
  • 原文地址:https://www.cnblogs.com/zhaojj/p/7772675.html
Copyright © 2011-2022 走看看