Java设计模式

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

2020-04-24  本文已影响0人  杨斌_1024

代理模式概述

代理模式是一种设计模式,类似让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

上一篇 下一篇

猜你喜欢

热点阅读