/**
* 抽象基类
*/
abstract class Unit
{
/**
*获取名称
*/
abstract public function getName();
}
/**
* Cpu类
*/
class Cpu extends Unit
{
public function getName()
{
return 'i am cpu';
}
}
/**
* 内存类
*/
class Memory extends Unit
{
public function getName()
{
return 'i am memory';
}
}
/**
* 键盘类
*/
class Keyboard extends Unit
{
public function getName()
{
return 'i am keyboard';
}
}
/**
* 计算机类
*/
class Computer
{
protected $_items = [];
public function add(Unit $unit)
{
$this->_items[] = $unit;
}
public function print()
{
// 循环打印各个组成部分
foreach ($this->_items as $item) {
$item->getName();
}
}
}
/**
* 抽象基类
*/
abstract class Unit
{
/**
* 获取名称
*/
abstract public function getName();
/**
* 用来接受访问者对象,回调访问者的visit方法
* 非常关键的方法
*/
public function accept(Visitor $visitor)
{
$method = visit . get_class($this);
if (method_exists($visitor, $method)) {
$visitor->$method($this);
}
}
}
/**
* Cpu类
*/
class Cpu extends Unit
{
public function getName()
{
return 'i am cpu';
}
}
/**
* Memory类
*/
class Memory extends Unit
{
public function getName()
{
return 'i am memory';
}
}
/**
* Keyboard类
*/
class Keyboard extends Unit
{
public function getName()
{
return 'i am keyboard';
}
}
/**
* Keyboard类
*/
interface Visitor
{
public function visitCpu(Cpu $cpu);
public function visitMemory(Memory $memory);
public function visitKeyboard(Keyboard $keyboard);
}
/**
*
*/
class PrintVisitor implements Visitor
{
public function visitCpu(Cpu $cpu)
{
echo "hello, " . $cpu->getName() . "\n";
}
public function visitMemory(Memory $memory)
{
echo "hello, " . $memory->getName() . "\n";
}
public function visitKeyboard(Keyboard $keyboard)
{
echo "hello, " . $keyboard->getName() . "\n";
}
}
/**
*
*/
class Computer
{
protected $_items = [];
public function add(Unit $unit)
{
$this->_items[] = $unit;
}
/**
* 调用各个组件的accept方法
*/
public function accept(Visitor $visitor)
{
foreach ($this->_items as $item) {
$item->accept($visitor);
}
}
}
$computer = new Computer();
$computer->add(new Cpu());
$computer->add(new Memory());
$computer->add(new Keyboard());
$printVisitor = new PrintVisitor();
$computer->print($printVisitor);
// 以上的代码将打印出
hello, i am cpu
hello, i am memory
hello, i am keyboard
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有