设计模式之代理模式(Proxypattern)

代理模式概述

代理模式是一种设计模式,类似让A去做事情,但是客户端通过引用目标对象(A)的代理对象完成对A的方法或行为的执行操作,代理对象可以在自己的方法的内部增强A的行为。

例如:小明开了一个网店,去批发商进货,批发商的货物又是从一个大型超市进的。

这里就是代理模式,小明作为客户(客户端),通过批发商(代理对象)去超市进货物,经过了开车=>付钱=>超市交货=>拿货,小明然后拿到货物。这里的除超市交货,其他行为都是批发商(代理对象)产生,这是所谓的方法增强。

类结构图


本文类图

静态代理

静态代理模型

静态代理的一个特点就是,代理对象的类是显示声明的(需要自己写代理类),在代理类里面使用目标对象的引用。

上图的意思就是:Animal接口有两个实现类Monkey,Person.现在要使用静态代理Animal, 那么先声明一个代理类(StaticProxy),通过这个代理类来生成Animal的代理对象,再一个这个代理类要实现Animal接口,并且里面要有Animal的引用。这样才能引用Animal的方法。

缺点:

只能代理一种类型的对象,如果想要代理其他的类,那么代理类需要不断的去实现目标对象的方法。再一个不符合设计模式的原则,1.开放-封闭原则 2.单一职责

Static Code GitHub Depository

动态代理


动态代理模型

动态代理的一个特点就是不用显式的声明代理类,代理对象是动态生成的(运行期间),并且可代理任何对象。

上图的意思:通过DynamicProxyFactory在运行期间生成代理对象dynamicProxy,而dynamicProxy持有Animal,Machine等向上转型的Object引用(Object target), 通过反射可以执行具体目标实现类的方法,达到动态代理的目的。

代理模式代码:Dynamic Code GitHub Depository

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 总览 这篇文章我们简单讲一讲Java语言中代理模式的几种实现方式。这篇文章仅仅是在代码上的实现。原理篇会在后面分开...
    SherlockBlaze阅读 1,705评论 0 2
  • 目录 本文的结构如下: 引言 什么是代理模式 模式的结构 典型代码 代理模式分类 代码示例 代理模式和装饰者模式的...
    w1992wishes阅读 1,597评论 0 13
  • 1、代理模式 即Proxy Pattern,23种java常用设计模式之一。代理模式的定义:对其他对象提供一种代理...
    SpaceCat阅读 1,153评论 0 3
  • 7.代理模式 7.1.课程目标 1、掌握代理模式的应用场景和实现原理。 2、了解静态代理和动态代理的区别。 3、了...
    我是阿喵酱阅读 635评论 0 0
  • 《日精进打卡》 姓名:倪显忠 公司名称:上海松科 《六项精进》学习营第499期感谢一组队长 《幸福精进》学习营第6...
    d94b51782f34阅读 70评论 0 0