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

    作为aop的实现技术支持,代理模式应该是最被人熟知的,代理模式用大白话来说,类似一个中介,可以进行方法的增强或者修改(Ps:我觉得静态代理模式和命令模式好像,命令模式也可以在具体命令类里调用接收者前后进行环绕增强,只不过无法修改方法只能进行拓展)

    当我们不方便直接调用一个类的时候 可以使用代理模式,直接看代码吧

    公共特征类

    public interface Animal {
        void eat();
    }

    具体实现类

    public class Dog implements Animal {
        @Override
        public void eat() {
            System.out.println("小狗要吃饭");
        }
    }

    代理类

    public class DogProxy  implements Animal{
       Dog dog;
    
        @Override
        public void eat() {
           //执行之前的操作
            System.out.println("吃饭前的准备");
            dog.eat();
            //执行之后的操作
            System.out.println("吃饭后");
        }
    
        public DogProxy(Dog dog) {
            this.dog = dog;
        }
    
    }

    测试类

    public class Client {
        public static void main(String[] args) {
            new DogProxy(new Dog()).eat();
        }
    }

    这种代理模式的缺点就是 每增加一个具体实现类 都要增加一个代理类,这种代理也叫静态代理,是一种在编译期就确定好的代理方式

    还有另一种通过反射来进行代理的方式,叫动态代理。这两种代理方式都需要被代理类实现接口,代理类实现与代理类的统一接口以便修改方法。还有另一种技术字节码代理,常见的有cglib和asm。

    代理类的核心就是创建代理类代理原类进行执行,因为实现了同一接口可以更方便的修改和增强。

    不和别人一样,不复制只真正理解
  • 相关阅读:
    天马行空DevOps-Dev平台建设概述
    lxd&openstack-lxd源码剖析
    歪歪架构师(软件)提升心法
    天马行空云计算(二)-Hardware&Hypervisor介绍
    天马行空云计算(一)-抽象架构视图
    Linux环境下Java应用性能分析定位-CPU使用篇
    杂谈微服务架构下SSO&OpenAPI访问的方案。
    IAAS-libvirt介绍。
    IAAS-虚拟化技术组件介绍
    集群---负载均衡---lvs篇
  • 原文地址:https://www.cnblogs.com/Vinlen/p/12784937.html
Copyright © 2011-2022 走看看