最后学习的一种结构型模式是
代理模式(Proxy)。
主要用于客户端无法直接访问一个对象的时候就可以通过代理模式来间接访问对象。
这种模式也比较常用,代码的结构和外观模式有些相似,也挺容易混淆的。
在网上查了学习了很多的资料,去对比了两者的特点,总结一下:
外观模式主要是描述类与类的关系,提供一个统一的外观接口类去实现多个类的方法。
输出结构:
主要用于客户端无法直接访问一个对象的时候就可以通过代理模式来间接访问对象。
这种模式也比较常用,代码的结构和外观模式有些相似,也挺容易混淆的。
在网上查了学习了很多的资料,去对比了两者的特点,总结一下:
外观模式主要是描述类与类的关系,提供一个统一的外观接口类去实现多个类的方法。
代理模式更多的是提供一个代理类去完成子类内部的所有方法,就像客户需要去委托一个代理机构去寻找一个专业的人去帮他们完成专业的事情,其中真实对象(专业人才)与代理对象(代理机构)需要实现相同的接口。
<?php
// 代理模式 index.php
header("Content-Type:text/html;charset=utf-8");
require_once "Proxy.php";
// 代理对象
$obj = new Proxy("专业的事情");
// 展示
$obj->Show();
<?php
// 代理接口
interface IProxy {
function Show();
}
// 真实对象
Class Profession implements IProxy
{
/**
* 私有 专业事情
* @var string
*/
private $Things;
/**
* 构造方法
* @access public
* @param string $things 专业的事情
*/
function __construct($things){
$this->Things = $things;
}
/**
* 真实对象的展示方法
* @access public
*/
function Show(){
echo "专业的人才做{$this->Things}";
}
}
// 代理对象
Class Proxy implements IProxy
{
/**
* 私有真实对象变量
* @var object
*/
private $Pro;
/**
* 构造方法
* @access public
* @param string $things 专业的事情
*/
function __construct($things){
$this->Pro = new Profession($things);
}
/**
* 代理对象的展示方法
* @access public
*/
function Show(){
$this->Pro->Show();
}
}
输出结构:
专业的人才做专业的事情