代理模式(Proxy pattern)

代理模式是一种结构型模式,它可以为其他对象提供一种代理以控制对这个对象的访问。

主要角色

  • 抽象主题角色(Subject):它的作用是统一接口。此角色定义了真实主题角色和代理主题角色共用的接口,这样就可以在使用真实主题角色的地方使用代理主题角色。
  • 真实主题角色(RealSubject):隐藏在代理角色后面的真实对象。
  • 代理主题角色(ProxySubject):它的作用是代理真实主题,在其内部保留了对真实主题角色的引用。它与真实主题角色都继承自抽象主题角色,保持接口的统一。它可以控制对真实主题的存取,并可能负责创建和删除真实对象。代理角色并不是简单的转发,通常在将调用传递给真实对象之前或之后执行某些操作,当然你也可以只是简单的转发。 与适配器模式相比:适配器模式是为了改变对象的接口,而代理模式并不能改变所代理对象的接口。

适用性

  • 为一些复杂的子系统提供一组接口
  • 提高子系统的独立性
  • 在层次化结构中,可以使用门面模式定义系统的每一层的接口

类图

实例

<?php
abstract class Subject { // 抽象主题角色
abstract public function action();
} class RealSubject extends Subject { // 真实主题角色
public function __construct() {}
public function action() {}
} class 大专栏  设计模式详解及PHP实现:代理模式lass="nc">ProxySubject extends Subject { // 代理主题角色
private $_real_subject = NULL;
public function __construct() {} public function action() {
$this->_beforeAction();
if (is_null($this->_real_subject)) {
$this->_real_subject = new RealSubject();
}
$this->_real_subject->action();
$this->_afterAction();
}
private function _beforeAction() {}
private function _afterAction() {}
} // client
$subject = new ProxySubject();
$subject->action();
?>

参考

  1. Wikipedia: Proxy pattern
  2. Wikipedia: 代理模式
  3. 代理模式(Proxy)和PHP的反射功能

最新文章

  1. Git 进阶指南(git ssh keys / reset / rebase / alias / tag / submodule )
  2. MySQL的启动脚本
  3. 兼容所有浏览器的JS动态显示当前日期时间
  4. Maven with Multi-module
  5. SimpleDateFormat()简单了解
  6. iOS 进阶 第九天(0408)
  7. [LeetCode] 30. Substring with Concatenation of All Words 解题思路 - Java
  8. STL MAP 反序迭代
  9. EditPlus配置C环境
  10. Windows10中“SQL Server 配置管理器”哪去了?
  11. 201521123013 《Java程序设计》第13周学习总结
  12. NOI2004郁闷的出纳员
  13. redis 3.2 新数据结构:quicklist、String的embstr与raw编码方式分界点
  14. ES系列七、ES-倒排索引详解
  15. EventFlow.helper.js 事件流程控制
  16. 几种常见算法的Python实现
  17. 【bzoj4066】 简单题
  18. plsql 粘贴
  19. BAT面试必备——Java 集合类
  20. 配置sql server 允许远程连接

热门文章

  1. 17.3.15---C语言详解FILE文件操作
  2. 1.Jenkins基本安装及插件离线安装
  3. LGOJ1861 星之器
  4. Hibernate相关概念及序列化和持久化的区别
  5. 领导力 / LeaderShip
  6. RHEL安装神器EPEL
  7. The Chosen One+高精度
  8. Ubuntu 12.04 编译bcm93349dcm软件包
  9. 在服务器搭建git服务器
  10. ROS中的日志(log)消息