好好爱自己!

【转】代理模式-php白话示例

原文:https://blog.csdn.net/weixin_43996758/article/details/106824919?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_baidulandingword-3&spm=1001.2101.3001.4242

 

---------------------------------------------------------

 

简述

代理模式是常用的结构型设计模式之一,当无法直接访问某个对象或访问某个对象存在困难时可以通过一个代理对象来间接访问。为了保证客户端使用的透明性,所访问的真实对象与代理对象需要实现相同的接口。
根据代理模式的使用目的不同,代理模式又可以分为多种类型,例如保护代理、远程代理、虚拟代理、缓冲代理等,它们应用于不同的场合,满足用户的不同需求。

举例理解

  1. 代购。代购电子产品,代购化妆品,代购网站,等等,这些代购行为对应的设计模式便是代理模式。
  2. 中介。房产中介,金融中介,劳务中介,等等,这些中介实现的功能也是代理模式。

结构

proxy结构图

实现思路

  1. 代理对象和目标对象均实现同一个行为接口。
  2. 代理类和目标类分别具体实现接口逻辑。
  3. 在代理类的构造函数中实例化一个目标对象。
  4. 在代理类中调用目标对象的行为接口。
  5. 客户端想要调用目标对象的行为接口,只能通过代理类来操作。

示例-静态代理

  • 场景:房屋租赁
  • 角色:租客,房产中介,房东
  • 描述:租客无法直接找到(访问)房东,所以找到房产中介这个代理来租房。房产中介代理了房东的房产,和房东共同拥有出租房屋这个功能。除此之外,房产中介可能还会提供更多的服务(方法)。
// 房屋租赁
interface house 
{
	public function rent();
}

// 房东
class owner implements house
{
	public function rent()
	{
		echo '房东出租房屋' . PHP_EOL;
	}
}

// 房产中介
class agent implements house
{
	// 持有一个被代理者的引用
	private $owner;

	public function __construct()
	{
		$this->owner = new owner;
	}

	public function rent()
	{
		echo '房产中介带看房' . PHP_EOL;
		$this->owner->rent();
		echo '房产中介保洁一次' . PHP_EOL;
	}
}

// 实例化一个中介
$agent = new agent;
// 租赁
$agent->rent();

 

输出:

房产中介带看房
房东出租房屋
房产中介保洁一次

 

优点

  • 代理模式能够协调调用者和被调用者,在一定程度上降低了系统的耦合度。
  • 远程代理使得客户端可以访问在远程机器上的对象,隐藏一个对象存在于不同地址空间,远程机器可能具有更好的计算性能与处理速度,可以快速响应并处理客户端请求。
  • 虚拟代理通过使用一个小对象来代表一个大对象,可以减少系统资源的消耗,对系统进行优化并提高运行速度。
  • 保护代理可以控制对真实对象的使用权限。

缺点

  • 由于在客户端和真实主题之间增加了代理对象,因此有些类型的代理模式可能会造成请求的处理速度变慢。
posted @   立志做一个好的程序员  阅读(158)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
历史上的今天:
2017-12-25 介绍css 的3D 变换(3D transform)
2016-12-25 “psql: could not connect to server: Connection refused” Error when connecting to remote database
2016-12-25 postgreSqL的序列sequence
2016-12-25 nginx+php-fpm 的配置下,php的错误日志
2015-12-25 FastCgi与PHP-fpm之间是个什么样的关系

不断学习创作,与自己快乐相处

点击右上角即可分享
微信分享提示