博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
访问者模式
阅读量:6156 次
发布时间:2019-06-21

本文共 1069 字,大约阅读时间需要 3 分钟。

原文链接:

解释:

    访问者模式构造了包含某个算法的截然不同的对象,在父对象以标准方式使用这些对象时就会将该算法应用于父对象。需要的对象包含以标准方式应用于某个对象的算法时,最佳的做法是使用访问者模式。假如一个对象中存在着一些与本对象不相干(或者关系较弱)的操作,为了避免这些操作污染这个对象,则可以使用访问者模式来把这些操作封装到访问者中去。

 

代码:

    首先是元素类,也就是被访问者CD:

namespace Vistor; class CD {
public $name; public function __construct($name) {
$this->name = $name; } public function buy() {
// do something ... } public function acceptVistor(CDVistor $cDVistor) {
$cDVistor->visitCD($this); } }

    然后是抽象访问者这里是一个接口:

namespace Vistor; interface CDVistor {
public function visitCD(CD $cd); }

    然后是访问者的实现:

namespace Vistor; class CDVistorLogPurchase implements CDVistor {
public function visitCD(CD $cd) {
$logContent = $cd->name . ' was purchase'; echo $logContent; // 写进日志文件 } }

    最后是App.php:

require 'CDVistor.php'; require 'CDVistorLogPurchase.php'; require 'CD.php'; $cd = new Vistor\CD('test'); $cd->buy(); $cd->acceptVistor(new Vistor\CDVistorLogPurchase());

    从代码中我们可以看到,通过CD类的acceptVistor将访问者注入,在该方法的内部调用访问者的具体方法visitCD(),然后访问者的visitCD()方法做了一个写日志的操作。

转载于:https://www.cnblogs.com/orlion/p/5350929.html

你可能感兴趣的文章
mysql做主从relay-log问题
查看>>
Docker镜像与容器命令
查看>>
批量删除oracle中以相同类型字母开头的表
查看>>
Java基础学习总结(4)——对象转型
查看>>
BZOJ3239Discrete Logging——BSGS
查看>>
SpringMVC权限管理
查看>>
spring 整合 redis 配置
查看>>
cacti分组发飞信模块开发
查看>>
浅析LUA中游戏脚本语言之魔兽世界
查看>>
飞翔的秘密
查看>>
Red Hat 安装源包出错 Package xxx.rpm is not signed
查看>>
编译安装mysql-5.6.16.tar.gz
查看>>
活在当下
查看>>
每天进步一点----- MediaPlayer
查看>>
PowerDesigner中CDM和PDM如何定义外键关系
查看>>
跨域-学习笔记
查看>>
the assignment of reading paper
查看>>
android apk 逆向中常用工具一览
查看>>
MyEclipse 报错 Errors running builder 'JavaScript Validator' on project......
查看>>
Skip List——跳表,一个高效的索引技术
查看>>