1. 秦子帅的博客首页
  2. Android

设计模式(6)-代理模式详解(易懂)

设计模式(6)-代理模式详解(易懂)

安卓干货铺
专注Android技术,坚持原创+博文分享
关注

代理模式定义

定义:为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。

设计模式(6)-代理模式详解(易懂)

  • Subject:抽象角色,提取的公共方法,可以是一个接口或者抽象类

  • RealSubject:真实角色,实现具体的业务逻辑

  • Proxy:代理角色,对真实角色的逻辑处理,实现抽象角色的方法,并可以加上自己的操作逻辑。

实例说明

代理也就是委托,我首先想到的就是游戏代练。这个大家熟悉吧,下面就拿游戏代练来说明一下代理模式:

1.抽象角色:也就是公共方法-玩游戏刷级


2.真实角色:这里指的是玩游戏的人


3.代理,这里找个游戏代练来帮他刷级


4.调用:


设计模式(6)-代理模式详解(易懂)

模式结构

代理模式分为静态代理、动态代理。

静态代理是由程序员创建或工具生成代理类的源码,再编译代理类。所谓静态也就是在程序运行前就已经存在代理类的字节码文件,代理类和委托类的关系在运行前就确定了。

动态代理是在实现阶段不用关心代理类,而在运行阶段才指定哪一个对象。

静态代理最基本的就是上面的实例了,下面主要讲解一下动态代理,这很重要。

动态代理

动态代理是在实现阶段不用关心代理类,而在运行阶段才指定哪一个对象。

首先先了解一下动态代理类

1.Interface InvocationHandler:

该接口中仅定义了一个方法Object:invoke(Object obj,Method method,Object[] args)。这个抽象方法在代理类中动态实现。

我们来看一下invoke中的三个参数:

  • obj一般是指代理类

  • method是被代理的方法

  • args为该方法的参数数组。


2.Proxy:

动态代理类,提供了getProxyClass (ClassLoader loader,Class[] interfaces)和newProxyInstance(ClassLoader loader,Class[] interfaces,InvocationHandler h)两种静态方法。

我们来看一下newProxyInstance中的三个参数:

  • CLassLoader loader:类的加载器 

  • Class<?> interfaces:指定动态代理类需要实现的所有接口

  • InvocationHandler h:得到InvocationHandler接口的子类的实例

还拿上面的实例说:

1.建立动态代理类:


2.调用:

设计模式(6)-代理模式详解(易懂)

注意:实现动态代理的首要条件:被代理类必须实现接口。

还有一些没有提出来,比如强制代理等等,这些大家可以自己去写一写…

文章学习参考了《设计模式之禅》与网上博文

设计模式(6)-代理模式详解(易懂)
承香墨影
只分享最有用的原创技术干货!
关注

设计模式(6)-代理模式详解(易懂)

推荐阅读:

设计模式(5)-建造者模式详解(易懂)

设计模式(4)-模板方法模式详解(易懂)

设计模式(3)-抽象工厂模式详解(易懂)

设计模式(2)-工厂方法模式详解(易懂)

设计模式(6)-代理模式详解(易懂)

设计模式(6)-代理模式详解(易懂)

原文始发于微信公众号( 秦子帅 ):设计模式(6)-代理模式详解(易懂)

发布者:秦子帅,转转请注明出处:http://qinzishuai.cn/index.php/2018/01/26/030a4bfb9b/

联系我们

912241847

在线咨询:点击这里给我发消息

邮件:qzs531156@163.com

QR code