美文网首页
代理模式

代理模式

作者: cxm11 | 来源:发表于2016-04-23 19:17 被阅读111次

Android插件化原理解析——Hook机制之动态代理

Android插件化原理解析——概要

Retrofit2 动态代理下的分析


代理是什么

代理是一种设计模式,分为静态代理和动态代理。

没有代理前,调用是这样的:

  • 调用者
  • 业务细节实现

调用后,它们的调用顺序是这样的:

  • 调用者
  • 业务逻辑(一般是抽象方法或者是接口)
  • 业务细节实现

通过在中间加了一层代理,将业务逻辑与实现细节分层,方便了上层开发者。

代理可以实现方法增强,比如常用的日志、缓存等;也可以实现方法拦截,通过代理方法修改原方法的参数和返回值。


静态代理

通过用户手动编码或者在编译时自动生成。

在APPCompatActivity中的APPCompatDelegate抽象类就是静态代理,而抽象类的具体实例化是在静态语句块static{}区中根据版本号实现的,这样写可以避免 Activity 本身的业务过于冗余,同时将抽象类(也可能是接口)与实现类相分离,这样上层开发者可以专注于业务,而不用管具体的实现。

动态代理

动态代理是java中的字节码生成技术。通过接口生成代理类,并将代理类的实现交给InvocationHandler作为具体的实现。

传统的静态代理模式需要为每一个需要代理的类写一个代理类,如果需要代理的类有几百个那不是要累死?为了更优雅地实现代理模式,JDK提供了动态代理方式。

动态代理主要处理InvocationHandler和Proxy类。

AppCompatDelegateImplBase extends AppCompatDelegate

AppCompatDelegate
{
AppCompatDelegateImplBase
}

AppCompatDelegateImplBase(Context context, Window window, AppCompatCallback callback){
mContext = context;
mWindow = window;
mAppCompatCallback = callback;
...

}

AppCompatActivity extends FragmentActivity implements AppCompatCallback, TaskStackBuilder.SupportParentable, ActionBarDrawerToggle.DelegateProvider{

}

现在我们将ActionBarActivity里面的内部逻辑都抽离出来,然后封装成一个单一的代理(delegate)api供调用,AppCompatDelegate.AppCompatDelegate可以被任意带有Window.Callback的安卓对象创建,比如Activity或者Dialog子类。

Android


Android系统在Java层的UI实现。在Android应用程序的四大组件中,只有Activity组件与UI相关,它描述的是

Android应用程序的窗口创建过程

每一个Activity组件都有一个关联的ContextImpl对象,同时,它还关联有一个Window对象,用来描述一个具体的应用程序窗口。

SurfaceFlinger

相关文章

  • 设计模式

    单例模式 模板方法模式 工厂模式 代理模式 静态代理 JDK动态代理

  • 设计模式

    单例模式 代理模式 静态代理 jdk动态代理 cglib动态代理 工厂模式 适配器模式 建造者模式 观察者模式

  • kube-proxy的3种模式

    userspace代理模式 iptables代理模式 IPVS代理模式 https://kubernetes.io...

  • 第4章 结构型模式-代理模式

    一、代理模式简介 二、代理模式3个角色 三、代理模式的优点 四、代理模式的实例(游戏代练)

  • 理解代理模式

    原创博客地址 简介 代理模式,也叫做委托模式,分为:静态代理动态代理 代理模式也是平时比较常用的设计模式之一,代理...

  • 结构型 代理模式(文末有项目连接)

    1:什么是代理模式 2:没用代理模式时的实例 3:使用代理模式将其解耦(静态代理) 3:使用代理模式将其解耦(动态...

  • 设计模式-动态代理模式

    之前介绍了代理模式,大家也都了解了代理模式,不过之前介绍的代理模式是静态代理,静态代理什么意思?静态代理指的是代理...

  • 代理模式

    一、什么是代理模式 代理模式(Proxy pattern):代理模式又叫委托模式,是为某个对象提供一个代理对象,并...

  • 设计模式之代理模式(Proxy模式)

    代理模式的引入 代理模式的实例程序 代理模式的分析 代理模式的引入 Proxy是代理人的意思,指的是代替别人进行工...

  • Java设计模式之代理模式

    Java设计模式之代理模式 代理模式 静态代理 动态代理 为什么需要代理 通过代理,我们能够不用知道委托人是谁,而...

网友评论

      本文标题:代理模式

      本文链接:https://www.haomeiwen.com/subject/bhbxrttx.html