• 设计模式之代理模式


    代理模式从字面的含义上来讲就是找一个中介作为代理,对某些方法或服务进行增强,降低代码的耦合性。主要有三种代理模式

    一.静态代理:静态代理是由程序员创建或特定工具自动生成源代码,在对其编译。在程序员运行之前,代理类.class文件就已经被创建了。

    1.先创建提供服务的接口,作为源头

    package Proxy_design;
    //提供服务本体
    public interface SomeService {
        String doFirst();
        void doSecond();
    }
    

    2.实现服务接口,作为提供服务的本体

    public class SomeServiceImpl implements SomeService {
        @Override
        public String doFirst() {
            System.out.println("执行doFirst()方法");
            return "abcde";
        }
    
        @Override
        public void doSecond() {
            System.out.println("执行doSecond()方法");
        }
    }
    

    3.创建代理类,增强服务接口中的方法

    public class SomeServiceProxy implements SomeService {
        //创建代理目标对象
        private SomeService target;
    
        public SomeServiceProxy() {
            target=new SomeServiceImpl();
        }
    
        @Override
        public String doFirst() {
    //        代理类调用目标方法
            String result = target.doFirst();
    //        对目标方法进行增强
            return result.toUpperCase();
        }
    
        @Override
        public void doSecond() {
            target.doSecond();
        }
    }
    

    4.创建一个测试类

    public class MyTest {
        public static void main(String[] args) {
            SomeService someService = new SomeServiceProxy();
            String result = someService.doFirst();
            System.out.println("result=" + result);
            someService.doSecond();
        }
    }

    运行结果:

    代理类主要实现了服务接口的方法,然后通过new一个被代理类的对象,对被代理类的方法进行增强,然后在调用的时候,new一个代理类的对象,即可以调用增强后的方法。下面的图是对这整个过程底层实现的描述。首先最先进入栈的是main方法,然后调用代理类中的doFirst方法,然后再进一步调用被代理类中的doFirst方法,然后被代理类返回abcde,出栈,这时候代理类对其进行增强,然后再出栈,然后就传递给main方法,这时候就是ABCDE。

  • 相关阅读:
    highcharts参数详解
    文件上传与下载的前后端处理
    jQuery中,$.extend,$obj.extend和$.fn.extend三者的区别
    JS二维数据处理逻辑封装探究
    HTML5-WebSocket-初探
    关于CKEditor.NET的安全性错误
    SpringMVC源码从入门到放弃-DispatcherServlet
    Spring源码从入门到放弃-Controller注册
    一、dubbo源码从入门到放弃-SPI
    新人伤不起
  • 原文地址:https://www.cnblogs.com/baichendongyang/p/13235539.html
Copyright © 2020-2023  润新知