静态代理
时间:2020-04-27
本文章向大家介绍静态代理,主要包括静态代理使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
一、概念:
代理(Proxy)是一种设计模式提供了对目标对象另外的访问方式,即通过代理对象访问目标对象.这样做的好处是可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能。
这里使用到编程中的一个思想,不要随意去修改被人已经写到的代码或者方法,如果需要修改,可以通过代理的方式来扩展该方法。
举个例子来说代理的作用,假设我们想邀请一位明星,那么并不是直接连接明星,而是联系明星的经纪人,来达到同样的目。明星就是一个目标对象,他只要负责活动中的节目,而其他琐碎的事情就交给他的代理人(经纪人)来解决,这就是代理思想在现实中的一个例子。
用户-->代理对象-->目标对象;目标对象-->代理对象-->用户
二、静态代理
1.使用继承关系实现静态代理,通过继承原方法,重写方法,调用。
public class Man { public void eat() { System.out.println("吃饭"); } public void sleep() { System.out.println("睡觉"); } } public class Superman extends Man { @Override public void eat() { begin(); super.eat(); end(); } /** * 执行之前做的事 */ public void begin() { System.out.println("饭前水果"); System.out.println("喝酒"); } /** * 执行之后做的事 */ public void end() { System.out.println("饭后甜点"); System.out.println("散步"); } } public class Test { public static void main(String[] args) { Superman superman=new Superman(); superman.eat(); }
2.装饰者模式,重新写一个类
public class Super2Man { private Man man; public Super2Man(Man man) { this.man=man; } public void eat() { begin(); man.eat(); end(); } /** * 执行之前做的事 */ public void begin() { System.out.println("饭前水果"); System.out.println("喝酒"); } /** * 执行之后做的事 */ public void end() { System.out.println("饭后甜点"); System.out.println("散步"); } } public class Test { public static void main(String[] args) { Man man=new Man(); Super2Man super2Man = new Super2Man(man); super2Man.eat(); } }
原文地址:https://www.cnblogs.com/97guoxiang/p/12789598.html
- Spring Boot Actuator监控页面报错解决
- Spring Cloud中如何优雅的使用Feign调用接口
- Spring Cloud Eureka 集群高可用
- Spring Cloud Eureka 增加权限认证
- Spring Cloud Eureka 初探
- 房价网是怎么使用分布式作业框架elastic-job
- Spring Cloud Sleuth Zipkin 展示追踪数据
- Spring cloud Zuul Filter 使用小经验
- Spring Cloud Eureka REST 接口
- Spring Cloud Eureka 控制台快速查看Swagger API文档
- Spring Cloud Feign 启动UnsatisfiedDependencyException
- Spring Cloud Zuul结合Smconf配置中心动态进行IP黑名单限制
- 高性能NIO框架Netty入门篇
- Spring Boot Web 静态文件缓存处理
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 一文掌握开发利器:正则表达式
- 探讨iOS 图片解压缩到渲染过程
- iOS Abort 问题系统的解决方案
- 【jvm】01- java内存结构分析
- 【redis】01-redis简介
- 3000字详解四种常用的缺失值处理方法
- python学习笔记(7)——远程主机强迫关闭了一个现有的连接
- 【带你成为pyq最靓的仔】朋友圈九宫格(一)之图片切割篇
- Material Design Compoents 1.1.0
- 【第19期】HTTP请求头referer
- Sentinel流控日志与索引
- Next.js + TypeScript 搭建一个简易的博客系统
- 【redis】02-redis持久化存储以及对象存储
- Kubernetes 集群可视化监控之 Weave Scope 入门
- h5 与原生 app 交互的原理