Proxy pattern-代理模式
解决问题
一方面保证对象本身的行为聚合,避免非对象行为逻辑杂糅到对象行逻辑之中。另一方面,实现对象行为增强,通过代理织入代码,来增强对象的行为功能。
应用场景
主要应用于代码织入。如常用的spring aop
原理图
proxy:代理类
Subject :被代理对象
示例
实现方式主流有三种:静态代理、动态代理、cglib, 原理都是一样的,这里只举一个静态代理的例子
就像我们去买二手房要经过中介一样,房主将房源委托给中介,中介将房源推荐给买方。中间的任何手续的承办都由中介来处理,不需要我们和房主直接打交道。无论对买方还是卖房都都省了很多事情,但同时也要付出代价,对于买房当然是中介费,对于代码的话就是性能。下面我们来介绍实现AOP的三种代理方式。
下面我就以买房的过程中需要打日志为例介绍三种代理方式
静态和动态是由代理产生的时间段来决定的。静态代理产生于代码编译阶段,即一旦代码运行就不可变了。下面我们来看一个例子
public interface IPerson {public void doSomething();}public class Person implements IPerson {public void doSomething(){System.out.println("I want wo sell this house");}}public class PersonProxy {private IPerson iPerson;private final static Logger logger = LoggerFactory.getLogger(PersonProxy.class);public PersonProxy(IPerson iPerson) {this.iPerson = iPerson;}public void doSomething() {logger.info("Before Proxy");iPerson.doSomething();logger.info("After Proxy");}public static void main(String[] args) {PersonProxy personProxy = new PersonProxy(new Person());personProxy.doSomething();}}
复制代码
通过代理类我们实现了将日志代码集成到了目标类,但从上面我们可以看出它具有很大的局限性:需要固定的类编写接口(或许还可以接受,毕竟有提倡面向接口编程),需要实现接口的每一个函数(不可接受),同样会造成代码的大量重复,将会使代码更加混乱。
参考
https://en.wikipedia.org/wiki/Proxy_pattern
Proxy pattern-代理模式相关推荐
- 进阶学习(3.13) Proxy Pattern 代理模式
1, 代理模式, 这个地方的代理不是指JDK 动态代理 2, 代理模式和策略模式很像, 要注意区分, 区分的特征就是 2.1) 装饰者可以对任何的装饰抽象实例进行装饰, https://blog.cs ...
- 设计模式——代理模式(Proxy Pattern)之为别人做嫁衣
代理模式Proxy Pattern 代理模式 1.背景 2.定义 3.特征 4.应用场景 5.实验案例 参考 代理模式 1.背景 假如说我现在想租一间房子,虽然我可以自己去找房源,做卫生检测等一系列的 ...
- DesignPattern_Java:Proxy Pattern
代理模式 Proxy Pattern 委托模式 Provide a surrogate or placeholder for another object to control access to i ...
- 用回拨卡打电话来看代理模式+vb.net实现
前段时间为了打电话便宜,跑去买了个回拨卡.刚好现在有学习设计模式,对应到那个模式呢? 先说回拨卡工作原理:原先我是直接打电话给对方.现在呢,我要先把电话打到回拨卡那边的号上,然后在通过回拨卡打到对方手 ...
- 设计模式(初探工厂与代理模式)——学习记录
0 设计模式 一种思维,一种态度,一种进步 1 创建型模式:省去new的过程 单例模式 工厂模式 抽象工厂模式 建造者模式 原型模式. 2 结构型模式: 适配器模式 桥接模式 装饰模式 组合模式 外观 ...
- 设计模式—代理模式以及动态代理的实现
代理模式(Proxy Design Pattern)是为一个对象提供一个替身,以控制对这个对象的访问.即通过代理对象访问目标对象.被代理的对象可以是远程对象.创建开销大的对象或需要安全控制的对象. 一 ...
- 代理模式 :静态代理 +动态代理(jdk实现+cglib实现)
昨天被人问及动态代理与CGlib的区别,赶紧回顾一下: 什么是代理? 静态代理与动态代理 静态代理实例 JDK动态代理实例 CGLib 简介 CGLib 与JDK动态代理的区别 代理模式是Java中常 ...
- No2.大话设计模式学习之策略、装饰、代理模式
No2.大话设计模式学习之策略.装饰.代理模式 2.设计模式-part1 2.1.策略模式 描述:策略模式(Strategy Pattern)指同系列算法家族,内部都遵从算法家族的接口及方法规范 原则 ...
- 设计模式-代理模式~流星
Proxy Pattern Title Module Category Tags Proxy proxy-design Structural Gang of Four Proxy Decoupling ...
- 为别人做嫁衣——代理模式
代理模式(Proxy):为其他对象提供一种代理以控制对这个对象的访问. 代理模式(Proxy)结构图 Subject类,定义了RealSuject和Proxy的共用的接口,这样就在任何使用RealSu ...
最新文章
- Java面试人事篇(二)
- 数学家看到就把持不住,高斯被它迷得神魂颠倒,2600年的数学史里的一个奇迹……...
- vaadin_Vaadin提示:延迟加载和商品标识
- 网站搜索功能怎么实现_电商网站上的搜索功能是如何实现的?
- c# 模拟登陆 webbrowser 抓取_《VR+电力——更换绝缘子培训》已登陆Pico Neo 2
- 功能齐全的交易系统导航网源码
- 电脑小写字母怎么切换_笔记本键盘切换的操作流程
- 【微信小程序】图片自适应屏幕
- 运行“travel[org.apache.tomcat.maven:tomcat7 maven plugin:2.1:run]时出错:未指定项目JDK
- virtualBox报错 0x80004005
- java opencv 阀值分割_opencv-阈值分割
- druid之本机批量摄取
- 麦克风阵列声源定位实现
- M1 Mac安装PostgreSQL
- Kotlin 概述【官方】
- 生产和销售业务流程会计分录总结
- 快速学习-Saturn性能测试报告
- 作业车辆电子围栏应用
- 数据分析36计(15):这个序贯检验方法让 A/B 实验节约一半样本量
- 电容器选型参数介绍总结
热门文章
- JdbcTemplate实验
- SQL语句中常用关键词及其解释如下.pdf
- Java基础 -- 冒泡排序算法(带详细注释)
- ExcelApplication相关资料
- Effective_STL 学习笔记(二)小心对 “容器无关代码” 的幻想
- JS数组操作之增删改查
- 大数据应用现状:从发现价值到创造价值
- C#学习常用类(1003)---Timer类(System.Timers.Timer)
- 基于Jenkins 快速搭建持续集成环境
- ASP.NET vNext 概述