解决问题

一方面保证对象本身的行为聚合,避免非对象行为逻辑杂糅到对象行逻辑之中。另一方面,实现对象行为增强,通过代理织入代码,来增强对象的行为功能。

应用场景

主要应用于代码织入。如常用的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-代理模式相关推荐

  1. 进阶学习(3.13) Proxy Pattern 代理模式

    1, 代理模式, 这个地方的代理不是指JDK 动态代理 2, 代理模式和策略模式很像, 要注意区分, 区分的特征就是 2.1) 装饰者可以对任何的装饰抽象实例进行装饰, https://blog.cs ...

  2. 设计模式——代理模式(Proxy Pattern)之为别人做嫁衣

    代理模式Proxy Pattern 代理模式 1.背景 2.定义 3.特征 4.应用场景 5.实验案例 参考 代理模式 1.背景 假如说我现在想租一间房子,虽然我可以自己去找房源,做卫生检测等一系列的 ...

  3. DesignPattern_Java:Proxy Pattern

    代理模式 Proxy Pattern 委托模式 Provide a surrogate or placeholder for another object to control access to i ...

  4. 用回拨卡打电话来看代理模式+vb.net实现

    前段时间为了打电话便宜,跑去买了个回拨卡.刚好现在有学习设计模式,对应到那个模式呢? 先说回拨卡工作原理:原先我是直接打电话给对方.现在呢,我要先把电话打到回拨卡那边的号上,然后在通过回拨卡打到对方手 ...

  5. 设计模式(初探工厂与代理模式)——学习记录

    0 设计模式 一种思维,一种态度,一种进步 1 创建型模式:省去new的过程 单例模式 工厂模式 抽象工厂模式 建造者模式 原型模式. 2 结构型模式: 适配器模式 桥接模式 装饰模式 组合模式 外观 ...

  6. 设计模式—代理模式以及动态代理的实现

    代理模式(Proxy Design Pattern)是为一个对象提供一个替身,以控制对这个对象的访问.即通过代理对象访问目标对象.被代理的对象可以是远程对象.创建开销大的对象或需要安全控制的对象. 一 ...

  7. 代理模式 :静态代理 +动态代理(jdk实现+cglib实现)

    昨天被人问及动态代理与CGlib的区别,赶紧回顾一下: 什么是代理? 静态代理与动态代理 静态代理实例 JDK动态代理实例 CGLib 简介 CGLib 与JDK动态代理的区别 代理模式是Java中常 ...

  8. No2.大话设计模式学习之策略、装饰、代理模式

    No2.大话设计模式学习之策略.装饰.代理模式 2.设计模式-part1 2.1.策略模式 描述:策略模式(Strategy Pattern)指同系列算法家族,内部都遵从算法家族的接口及方法规范 原则 ...

  9. 设计模式-代理模式~流星

    Proxy Pattern Title Module Category Tags Proxy proxy-design Structural Gang of Four Proxy Decoupling ...

  10. 为别人做嫁衣——代理模式

    代理模式(Proxy):为其他对象提供一种代理以控制对这个对象的访问. 代理模式(Proxy)结构图 Subject类,定义了RealSuject和Proxy的共用的接口,这样就在任何使用RealSu ...

最新文章

  1. Java面试人事篇(二)
  2. 数学家看到就把持不住,高斯被它迷得神魂颠倒,2600年的数学史里的一个奇迹……...
  3. vaadin_Vaadin提示:延迟加载和商品标识
  4. 网站搜索功能怎么实现_电商网站上的搜索功能是如何实现的?
  5. c# 模拟登陆 webbrowser 抓取_《VR+电力——更换绝缘子培训》已登陆Pico Neo 2
  6. 功能齐全的交易系统导航网源码
  7. 电脑小写字母怎么切换_笔记本键盘切换的操作流程
  8. 【微信小程序】图片自适应屏幕
  9. 运行“travel[org.apache.tomcat.maven:tomcat7 maven plugin:2.1:run]时出错:未指定项目JDK
  10. virtualBox报错 0x80004005
  11. java opencv 阀值分割_opencv-阈值分割
  12. druid之本机批量摄取
  13. 麦克风阵列声源定位实现
  14. M1 Mac安装PostgreSQL
  15. Kotlin 概述【官方】
  16. 生产和销售业务流程会计分录总结
  17. 快速学习-Saturn性能测试报告
  18. 作业车辆电子围栏应用
  19. 数据分析36计(15):这个序贯检验方法让 A/B 实验节约一半样本量
  20. 电容器选型参数介绍总结

热门文章

  1. JdbcTemplate实验
  2. SQL语句中常用关键词及其解释如下.pdf
  3. Java基础 -- 冒泡排序算法(带详细注释)
  4. ExcelApplication相关资料
  5. Effective_STL 学习笔记(二)小心对 “容器无关代码” 的幻想
  6. JS数组操作之增删改查
  7. 大数据应用现状:从发现价值到创造价值
  8. C#学习常用类(1003)---Timer类(System.Timers.Timer)
  9. 基于Jenkins 快速搭建持续集成环境
  10. ASP.NET vNext 概述