一 Proxy模式

意图:

为其他对象提供一种代理以控制这个对象的访问。

适用性:

  l  远程代理( Remote Proxy ): 为一个对象在不同的地址空间提供局部代表。

  l  虚代理(Virtual Proxy)根据需要创建开销很大的对象。使用一个代理对象作为代表,在真正的需要时进行创建。

  l  保护代理(Protection Proxy):控制对原始对象的访问。保护代理用于对象应该有不同的访问权限的时候。

  l  智能指引(Smart Reference): 取代了简单的指针,它在访问对象时执行一些附加操作。对指向实际对象的引用计数,

    这样当该对象没有引用时,可以自动释放它,智能指针当第一次引用一个持久对象时,将它装入内存。

    在访问一个实际对象前,检查是否已经锁定了它,以确保其他对象不能改变它

其实每个模式名称就表明了该模式的作用,代理模式就是多一个代理类出来,替原对象进行一些操作,比如我们在租房子的时候回去找中介,为什么呢?因为你对该地区房屋的信息掌握的不够全面,希望找一个更熟悉的人去帮你做,此处的代理就是这个意思。再如我们有的时候打官司,我们需要请律师,因为律师在法律方面有专长,可以替我们进行操作,表达我们的想法。先来看看关系图:

根据上文的阐述,代理模式就比较容易的理解了,我们看下代码:

public interface Sourceable {  public void method();
}
public class Source implements Sourceable {  @Override  public void method() {  System.out.println("the original method!");  }
}
public class Proxy implements Sourceable {  private Source source;  public Proxy(){  super();  this.source = new Source();  }  @Override  public void method() {  before();  source.method();  atfer();  }  private void atfer() {  System.out.println("after proxy!");  }  private void before() {  System.out.println("before proxy!");  }
} 
public class ProxyTest {  public static void main(String[] args) {  Sourceable source = new Proxy();  source.method();  }  }

输出:

before proxy!
the original method!
after proxy!

代理模式的应用场景:

如果已有的方法在使用的时候需要对原有的方法进行改进,此时有两种办法:

1、修改原有的方法来适应。这样违反了“对扩展开放,对修改关闭”的原则。

2、就是采用一个代理类调用原有的方法,且对产生的结果进行控制。这种方法就是代理模式。

使用代理模式,可以将功能划分的更加清晰,有助于后期维护!

Android插件化开发基础之静态代理模式相关推荐

  1. Android插件化开发基础之Java动态代理(proxy)机制的简单例子

    一.代码 package com.sangfor.tree;import java.lang.reflect.InvocationHandler; import java.lang.reflect.M ...

  2. Android插件化开发基础之Java类加载器与双亲委派模型

    类加载器 Java虚拟机类加载过程是把Class类文件加载到内存,并对Class文件中的数据进行校验.转换解析和初始化,最终形成可以被虚拟机直接使用的java类型的过程. 在加载阶段,java虚拟机需 ...

  3. Android插件化开发基础之App如何动态加载类

    在 Java 里面,我们可以把一些类放到 .jar 文件里面,然后用 ClassLoader 动态加载.例如: URLClassLoader ucl = URLClassLoader.newInsta ...

  4. Android插件化开发基础之Java反射机制研究

    一.获得Class对象 Class<?> c = Class.forName("classname"); 抛出ClassNotFoundException 二.获得实现 ...

  5. Android插件化开发指南——Hook技术(一)【长文】

    文章目录 1. 前言 2. 将外部dex加载到宿主app的dexElements中 3. 插件中四大组件的调用思路 4. Hook 2.1 对startActivity进行Hook 2.1.1 AMS ...

  6. Android插件化开发之解决OpenAtlas组件在宿主的注冊问题

    Android插件化开发之解决OpenAtlas组件在宿主的注冊问题 OpenAtlas有一个问题,就是四大组件必须在Manifest文件里进行注冊,那么就必定带来一个问题,插件中的组件都要反复在宿主 ...

  7. Android插件化开发指南——插件化技术简介

    文章目录 1. 为什么需要插件化技术 2. 插件化技术的历史 3. 插件化实现思路 3.1 InfoQ:您在 GMTC 中的议题叫做<Android 插件化:从入门到放弃>,请问这个标题代 ...

  8. Android插件化开发之动态加载本地皮肤包进行换肤

    Android插件化开发之动态加载本地皮肤包进行换肤 前言: 本文主要讲解如何用开源换肤框架 android-skin-loader-lib来实现加载本地皮肤包文件进行换肤,具体可自行参考框架原理进行 ...

  9. Android插件化开发指南——实践之仿酷狗音乐首页

    文章目录 1. 前言 2. 布局分析 3. 底部导航栏的实现 4. 顶部导航栏和ViewPager+Fragment的关联 1. 前言 在Android插件化开发指南--2.15 实现一个音乐播放器A ...

最新文章

  1. JavaScript 正则表达式的使用
  2. 64位win10系统无法安装.Net framework3.5的解决方法
  3. 转:C#使用Log4Net记录日志
  4. magento更新产品状态报错
  5. 呆萌直播源码:如何开发视频直播平台?
  6. 一个亿的融资在一家芯片初创公司可以烧多久?
  7. 谷歌Gboard输入法新增“无痕模式”:仅在Chrome隐身窗口中适用
  8. Android Studio之提示Gradle sync failed: Plugin with id ‘com.novoda.bintray-release‘ not found.
  9. columnproperty server sql_获取SQL Server表字段的各种属性
  10. 深度 | 从DevOps到BizDevOps, 研发效能提升的系统方法
  11. docker 容器安装conposer_docker和php:将依赖项(composer)放入容器中
  12. 【面试收藏】Redis最全面试题
  13. JAVA中extends 与implements区别
  14. 大话设计模式读书笔记(十三) 状态模式
  15. Web自动化测试中的接口测试
  16. 蓝桥杯 ADV-11 算法提高 Torry的困惑(提高型)
  17. Java 阻塞队列实现原理分析
  18. Linux内存映射实现
  19. html怎么控制文字的行数,CSS3属性 line-clamp控制文本行数的使用
  20. [从头读历史] 第303节 星球战争 起始:冷兵器战争的宏观架构

热门文章

  1. ASP.NET Core - 在ActionFilter中使用依赖注入
  2. Blazor VS 传统Web应用程序
  3. 使用 dotnet-monitor 分析.NET 应用程序
  4. 快来参加学习.NET 挑战赛
  5. 五分钟了解dotnetcore配置框架
  6. 给 EF Core 查询增加 With NoLock
  7. 十问十答 Apache 许可证
  8. Asp.NET Core 轻松学-项目目录和文件作用介绍
  9. .NetCore从零开始使用Skywalking分布式追踪系统
  10. kubernetes高级之创建只读文件系统以及只读asp.net core容器