• 代理模式
  • 代理模式(Proxy pattern):
  • – 核心作用: • 通过代理,控制对对象的访问! 可以详细控制访问某个(某类)对象的方法,在调用这个方法前做前置处理,调用这个方法后 做后置处理。(即:AOP的微观实现!)
  • – AOP(Aspect Oriented Programming面向切面编程)的核心实现机制!
  • 如下的代理机制,经纪人,业务只需要和经纪人进行交互而不需要和明星本人进行交谈

• 代理模式(Proxy pattern):

– 核心角色:

• 抽象角色

– 定义代理角色和真实角色的公共对外方法

• 真实角色

– 实现抽象角色,定义真实角色所要实现的业务逻辑, 供代理角色调用。

– 关注真正的业务逻辑!

• 代理角色

– 实现抽象角色,是真实角色的代理,通过真实角色 的业务逻辑方法来实现抽象方法,并可以附加 自己的操作。

– 将统一的流程控制放到代理角色中处理!

应用场景:

– 安全代理:屏蔽对真实角色的直接访问。

– 远程代理:通过代理类处理远程方法调用(RMI) – 延迟加载:先加载轻量级的代理对象,真正需要再加载真实对象。

• 比如你要开发一个大文档查看软件,大文档中有大的图片,有可能一个图片有100MB,在打开文件时不可能将所有的图片都显示出来,这样就可以 使用代理模式,当需要查看图片时,用proxy来进行大图片的打开。

• 分类:

– 静态代理(静态定义代理类)

–动态代理(动态生成代理类)

•JDK自带的动态代理

• javaassist字节码操作库实现

• CGLIB (推荐使用,并且可以不需要接口进行代理)

• ASM(底层使用指令,可维护性较差)

静态代理的缺陷

1)代理类和委托类实现了相同的接口,代理类通过委托类实现了相同的方法。这样就出现了大量的代码重复。如果接口增加一个方法,除了所有实现类需要实现这个方法外,所有代理类也需要实现此方法。增加了代码维护的复杂度。

2)代理对象只服务于一种类型的对象,如果要服务多类型的对象。势必要为每一种对象都进行代理,静态代理在程序规模稍大时就无法胜任了。如上的代码是只为UserManager类的访问提供了代理,但是如果还要为其他类如Department类提供代理的话,就需要我们再次添加代理Department的代理类。

  • 优点

    • 实现解耦客户端不需要知道的具体的实现类的是谁只需要和的代理类打交道即可。
  • 代理价接口
 * 代理接口*/public interface Proxy {void sing ();}

  • 被代理类
public class Star  implements  Proxy{@Overridepublic void sing() {System.out.println("明星唱歌");}
}

  • 代理类
 * 代理类*/public class BrokerStar implements  Proxy {private Star star;@Overridepublic void sing() {star.sing();}public BrokerStar(Star star) {this.star = star;}}

  • 测试代码
public class Client01 {public static void main(String[] args) {Star star = new Star();BrokerStar brokerStar =new BrokerStar(star);brokerStar.sing();}
}

javaaop模式供其他项目调用_结构性模型-静态代理模式相关推荐

  1. javaaop模式供其他项目调用_Java 分布式架构的 开源的支付项目 调试实战

    开源分布式架构的Java 支付项目调试实战 支付项目也有开源的?当然也有,今天就来撸一个gitee上开源的,调试一下.该项目包含微信支付.支付宝支付.银联支付,对于大多数公司来说够用了.而且该项目st ...

  2. 接口(jdk1.8及之后) 单例模式(饿汉式,懒汉式) 静态代理模式 简单工厂模式 匿名内部类 lambda表达式

    接口: jdk1.8及之后新增了2种可以定义存在方法体的方法: 默认方法 (default关键字修饰的方法 ) 使用:通过实现类对象使用 静态方法 (掌握) 使用:通过接口名去调用 目前接口中: 必须 ...

  3. 静态代理模式(多线程底部原理)

    静态代理模式总结(线程底部原理) 真实对象和代理对象都要实现同一个接口 代理对象要代理真实角色 好处: - 代理对象可以做很多真实对象做不了的事情 - 真实对象专注做自己的事情 创建静态代理模式:一个 ...

  4. 设计模式之静态代理模式实战

    转载自 设计模式之静态代理模式实战 静态代理模式很简单,代理类和实现类都实现相同的接口,然后通过代理类来调用实现类的方法. 如我们想保存用户信息之前打印用户信息,或者保存用户信息之后把这些信息缓存下来 ...

  5. 使用静态代理模式实现公用的报表导出功能

    先聊一下什么是代理模式? 代理模式 给某个对象提供一个代理对象,并由代理独享控制对原对象的引用.什么意思呢?代理模式就有点像我们生活中常见的中介. 举个例子,我想买辆二手车,第一种方式是自己去找车源, ...

  6. Java多线程:静态代理模式

    静态代理模式 要求:有真实角色,代理角色 真实角色和代理角色要实现同一个接口 代理角色要持有真实角色的引用 设计静态代理模式 (1)必须有一个共同使用的接口 1 // 共同的接口 2 public i ...

  7. 浅谈java的静态代理模式

    嗨喽-小伙伴们XX好呀, 本章我们来介绍,java中出现的静态代理模式. 代理,对应于英语单词-----Proxy,从字面上理解,就是在实现代理目标(Target)所有的需求的同时,还能够实现代理目标 ...

  8. 【设计模式】--- 装饰器模式、静态代理模式和动态代理模式

    文章目录 1 引子 2 业务场景介绍 3 静态代理模式 4 装饰器模式 5 动态代理模式 5.1 Proxy --- 具体的代理对象生成组件 5.2 InvocationHandler --- 封装被 ...

  9. 研磨23种大话设计模式------动态代理模式 + 小结静态代理模式

    大家好,我是一位在java学习圈中不愿意透露姓名并苟且偷生的小学员,如果文章有错误之处,还望海涵,欢迎多多指正 如果你从本文 get 到有用的干货知识,请帮忙点个赞呗,据说点赞的都拿到了offer 在 ...

  10. Java从接触到放弃(十五)--线程、多线程、静态代理模式

    Day Fifteen 线程 多任务: 可以理解为一个人同时去干几件事,就好比在上厕所的时候边大号边玩手机,这就是一个多任务的实例.再好比现在很多人中午在吃饭的时候,或者说在吃饭的时候,看一些下饭综艺 ...

最新文章

  1. 无状态逻辑服务器,无状态 | RESTful API 中文网
  2. linux内核网络协议栈--packet_type(十二)
  3. java feature get_Java ShapeFeature.getLocations方法代码示例
  4. 用javascript判断当前是安卓平台还是ios平台
  5. QGraphicsWidget收不到鼠标、键盘消息解决
  6. 第八讲:tapestry组件
  7. 7.5 GRASP原则五:高内聚 High Cohesion
  8. cmd cd 无法切换目录_一分钟掌握cmd基础操作,告别鼠标
  9. 程序员的进阶课-架构师之路(6)-链表
  10. windows live 2012发布文章解决办法??
  11. 网站功能小Demo——学习MD5加密的一点心得
  12. Webots安装,及urdf转webots,通过3d模型获取Proto_indexedFaceset数据,MoveIt机械臂路径规划
  13. 2017/9/5的学习内容___Python装饰器的应用
  14. XAMPP 使用教程
  15. LSI SAS 3008配置操作
  16. Luogu2257 YY的GCD
  17. 佳能g3800编程器固件_佳能g3800清零软件 佳能g3800打印机废墨清零
  18. linux备份文件放在哪里,linux备份文件命令有哪些?
  19. (Animator详解一)mixamo动画导入Unity的一些配置
  20. 基于vue的组织架构树组件_Vue组件基于D3.js布局显示树

热门文章

  1. 在Flex4中嵌入字体
  2. 查看sql语句执行时间/测试sql语句性能
  3. BT服务器的安装和配置
  4. 机器学习模型融合stack详解及代码实战
  5. mysql 正则 捕获_在mysql中模拟正则表达式捕获组
  6. js定位div坐标存入mysql_用JS将页面定位到某个位置(DIV)
  7. 拔光所有头发编写的双色球系统,完整代码详解,用的全是Java基础的知识,另外,我这个里面特意留了一个BUG,谁要是能找出来,我就去他评论区下面唱征服!!
  8. python 字典排序成绩_原来python中dict()的高级用法可以这样实现!真是让我长了见识...
  9. smbus协议的command_SMBus接口信号/应用框图/帧格式
  10. r语言plotmds_利用R语言进行数据分析