文章目录
  1. 1. 模式定义
  2. 2. 模式结构
  3. 3. UML图
  4. 4. 代码实现
    1. 4.1. AbstractObject.java
    2. 4.2. RealObject.java
    3. 4.3. ProxyObject.java
    4. 4.4. 测试类
    5. 4.5. 运行结果
  5. 5. 代理模式的优点
  6. 6. 代理模式的缺点

今天我们来学习一种结构型模式,代理模式(Proxy Pattern)。

模式定义

给某一个对象提供一个代理,并由代理对象控制对原对象的引用。

模式结构

代理模式包含如下角色:

AbstractObject: 抽象角色
ProxyObject: 代理角色
RealObject: 真实角色

UML图

代码实现

AbstractObject.java

·

1
2
3
4
5
6
7
/**
* 抽象角色
*/
public interface AbstractObject {

void operation();
}

RealObject.java

1
2
3
4
5
6
7
8
9
10
/**
* 真实角色
*/
public class RealObject implements AbstractObject{

@Override
public void operation() {
System.out.println("RealObject do SomeThing");
}
}

ProxyObject.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
/**
* 代理角色
*/
public class ProxyObject implements AbstractObject {

private RealObject mRealObject =new RealObject();

@Override
public void operation() {
System.out.println("Before operation");
mRealObject.operation();
System.out.println("After operation");
}
}

测试类

1
2
3
4
5
6
7
8

public class MyClass {

public static void main(String[] args) {
AbstractObject abstractObject = new ProxyObject();
abstractObject.operation();
}
}

运行结果

代理模式的优点

  • 代理模式能够协调调用者和被调用者,在一定程度上降低了系 统的耦合度。

  • 远程代理使得客户端可以访问在远程机器上的对象,远程机器 可能具有更好的计算性能与处理速度,可以快速响应并处理客户端请求。

  • 虚拟代理通过使用一个小对象来代表一个大对象,可以减少系 统资源的消耗,对系统进行优化并提高运行速度。

  • 保护代理可以控制对真实对象的使用权限。

代理模式的缺点

  • 由于在客户端和真实主题之间增加了代理对象,因此 有些类型的代理模式可能会造成请求的处理速度变慢。

  • 实现代理模式需要额外的工作,有些代理模式的实现 非常复杂。

代码已经放到GitHub上了https://github.com/HJXANDHMR/DesignPattern

参考
http://design-patterns.readthedocs.io/zh_CN/latest/structural_patterns/proxy.html

欢迎大家关注我的微信公众号,我会不定期的分享些Android开发的技巧

文章目录
  1. 1. 模式定义
  2. 2. 模式结构
  3. 3. UML图
  4. 4. 代码实现
    1. 4.1. AbstractObject.java
    2. 4.2. RealObject.java
    3. 4.3. ProxyObject.java
    4. 4.4. 测试类
    5. 4.5. 运行结果
  5. 5. 代理模式的优点
  6. 6. 代理模式的缺点