• Java设计模式概述之结构型模式(代理模式)


    二、代理模式

    我们在实践过程中,常常需要对一个类的功能进行完善和增强。于是,我们经常会用继承类和实现接口的方式来增强一个类,但这样或多或少会造成类与类之间的耦合:继承类之后不能再继承其他类;实现接口的话必须实现接口中的所有方法,且若接口的方法发生改变,实现接口类也必须做出改变,这样不利于最大限度扩展。

    代理模式(Proxy)使用代理类来增强原始类。代理类需要与原始类建立逻辑关系的代码,而原始类不需要任何改动。这样有利于原始类的扩展与维护。代理模式增强原始类得到方式是非侵入性的。

    Spring AOP(Aspect Oriented Programming)就很好的体现了代理模式。

    下面我们来分析一段代理模式的实例代码:

    /**
     * @author Hanlin Wang
     */
    
    public class ProxyMode {
        public static void main(String[] args) {
            Proxy proxy = new Proxy();
            proxy.run();
        }
    }
    
    //定义接口
    interface Resource{
        void run();
    }
    
    //定义类实现Resource接口
    class M implements Resource{
        public void run() {
            System.out.println("M's running");
        }
    }
    
    //定义代理类
    class Proxy implements Resource{
        private M m;
        public Proxy(){
            m = new M();
        }
        @Override
        public void run() {
            // TODO Auto-generated method stub
            before();
            m.run();
            after();
        }
        private void before(){
            System.out.println("before");
        }
        private void after(){
            System.out.println("after");
        }
    }

    代理类中定义类before和after方法,用来增强被代理类(原始类)的run方法。Proxy类封装了一个M类引用m,并在Proxy类实例化时同时实例化M类。

  • 相关阅读:
    9、搜索 :ion-searchbar
    8、列表:ion-list
    uwp 的work project 的 取消闹钟
    long ? 的使用和理解
    uwp 中的音频开发
    uwp 之语音朗读
    uwp 语音指令
    C# 泛型(Generic)
    C# 排序列表(SortedList)
    C# 反射(Reflection)
  • 原文地址:https://www.cnblogs.com/wanxi/p/6476241.html
Copyright © 2020-2023  润新知