概述
设计模式体现出的是一种编程思想,偶尔跟人交流(装逼)时,都喜欢把编程形容为一门艺术,而艺术往往包含了思想、灵魂甚至是哲学的元素在里面。所以很多人觉得程序员闷骚,怪异和宅等。其实细想一下,这也不就是艺术家的特性嘛。朴素的唯物主义认为世界是由金木水火土组成的,而对于程序员来说,世间皆由对象组成的,金木水火土间接或直接的构成对象,我是不是可以认为,程序员都属于唯物主义者的艺术家呢。哈哈哈哈哈哈哈哈…装逼到此。
今天讲的代理设计模式是程序中很常用且很重要的一种设计模式。我们常使用的框架如Retrofit、 Xutils等都使用了代理设计模式,定义:为其他对象提供一种代理,以控制对这个对象的访问。通过调用代理,来间接的调用实际的对象。它分为静态代理和动态代理。举个例子,假如我们要去银行办卡,但是我们自己能直接办卡吗,这肯定是不能的,卡是由银行的工作人员来帮我们办的。我们有办卡的需求,而工作人员就是代理对象,间接的帮我们完成需求。
具体实现
静态代理
|
|
|
|
|
|
|
|
以上就是静态代理一个简单的demo。
动态代理
动态代理涉及到了反射机制,在运行时生成代理对象。JDK已经给我们提供了一个便捷的动态代理接口 InvocationHandler,源码最终调用的是 Native 方法去生成我们的代理对象
|
|
这里总结一下动态代理的步骤:
- 编写一个委托类的接口,即静态代理的(IHelper接口)
- 实现一个真正的委托类,即静态代理的(Helper类)
- 创建一个动态代理类,实现InvocationHandler接口,并重写该invoke方法
- 在测试类中,生成动态代理的对象。