某软件公司承接了某信息咨询公司的收费商务信息查询系统的开发任务,该系统的基本需求如下:
(1) 在进行商务信息查询之前用户需要通过身份验证,只有合法用户才能够使用该查询系统;
(2) 在进行商务信息查询时系统需要记录查询日志,以便根据查询次数收取查询费用。
该软件公司开发人员已完成了商务信息查询模块的开发任务,现希望能够以一种松耦合的方式向原有系统增加身份验证和日志记录功能,客户端代码可以无区别地对待原始的商务信息查询模块和增加新功能之后的商务信息查询模块,而且可能在将来还要在该信息查询模块中增加一些新的功能。
现使用代理模式设计并实现该收费商务信息查询系统。
新建解决方案,新建一个控制台应用程序,编写代理模式实现代码,实现以上需求的案例,要求编写为控制台应用程序,并能调试运行。
类图:
抽象主题角色:
-
interface Subject
-
{
-
public
function doSearch();
-
}
真实主题角色:
-
class RealSubject implements Subject
-
{
-
public
function doSearch()
-
{
-
// TODO: Implement doSearch() method.
-
echo
'我是真实主题角色中的查询'.PHP_EOL;
-
}
-
}
代理主题角色:
-
require_once
'Subject.php';
-
require_once
'RealSubject.php';
-
class Proxy implements Subject
-
{
-
protected $name;
-
function __construct($name)
-
{
-
$this->name=$name;
-
}
-
-
public
function doSearch()
-
{
-
// TODO: Implement doSearch() method.
-
$validate=
new Validate(
$this->name);
-
if($validate){
-
$real=
new RealSubject();
-
$real->doSearch();
-
new Log(
$this->name);
-
}
-
}
-
}
-
//验证
-
class Validate{
-
function __construct($name){
-
echo $name.
'通过验证'.PHP_EOL;
-
return
true;
-
}
-
}
-
//日志
-
class Log{
-
function __construct($name){
-
echo
'已记录'.$name.PHP_EOL;
-
}
-
}
客户端:
-
require_once
'Proxy.php';
-
class Client
-
{
-
function main(){
-
$proxy=
new Proxy(
'aa');
-
$proxy->doSearch();
-
}
-
}
-
$a=
new Client();
-
$a->main();
效果:
转载:https://blog.csdn.net/Moxi099/article/details/117436981
查看评论