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

    代理模式概述

    客户端不能直接操作B类(目标类),需要通过A类(代理类)调用B类的实例方法来完成最终的逻辑。其中A类和B类需要继承同一父级或者同一接口

    UML图

    一个简单的示例:

    // 客户端操作类和实际操作类的接口(两个类都实现这个接口)
    package com.proxy;
    
    public interface Subject {
    	public void request();
    }
    // 实际被操作的类
    package com.proxy;
    
    public class RealSubject implements Subject {
    
    	@Override
    	public void request() {
    		System.out.println("实际需要执行的操作");
    	}
    
    }
    // 代理类 客户端调用的类
    package com.proxy;
    
    public class Proxy implements Subject{
    	private RealSubject realSubject;
    	@Override
    	public void request() {
    		if(realSubject == null) {
    			realSubject = new RealSubject();
    		}
    		//调用实际需要调用的实例方法
    		realSubject.request();
    	}
    }
    
    // 客户端代码
    package com.proxy;
    public class TestMain {
    	public static void main(String[] args) {
    		Subject operation = new Proxy();
    		operation.request();
    	}
    }

     总结

    当我们需要在实际操作的方法之前进行预处理(如添加日志操作,访问次数记录,权限控制判断)或者在之后进行调用后处理(日志处理,缓存等)时,可以使用代理模式,对客户端隐藏了调用目标逻辑的细节。

    才疏学浅,如文中有错误,感谢大家指出。

  • 相关阅读:
    Linux任务调度
    用户管理——用户和用户组
    Linux实用指令
    spring模拟ioc
    浅谈log4j-3-不同输出样式
    浅谈log4j-2
    浅谈log4j
    windows下安装kibana
    【PHP】 解决报错:Error: php71w-common conflicts with php-common-5.4.16-43.el7_4.x86_64
    mysql 8.0设置日期为0000-00-00 00:00:00时报错
  • 原文地址:https://www.cnblogs.com/runningRookie/p/11108775.html
Copyright © 2011-2022 走看看