<!DOCTYPE html>
<meta charset="utf-8">
<?php
require_once 'Group.php';
require_once 
'Employee.php';
require_once 
'DumpVisitor.php';
require_once 
'CountVisitor.php';

//木構造を定義
$rootEntry = new Group('001''本社');
$rootEntry->add(new Employee('001-A''社長'));
$rootEntry->add(new Employee('001-B''従業員1'));
$rootEntry->add(new Employee('001-C''従業員2'));

$group1 = new Group('002''大阪支店');
$group1->add(new Employee('002-A''支店長1'));
$group1->add(new Employee('002-B''従業員3'));
$group1->add(new Employee('002-C''従業員4'));
$rootEntry->add($group1);

$group2 = new Group('003''名古屋支店');
$group2->add(new Employee('003-A''支店長2'));
$group2->add(new Employee('003-B''従業員5'));
$group2->add(new Employee('003-C''従業員6'));
$rootEntry->add($group2);

//Visitorで木構造を表示
$visitor = new DumpVisitor();
$rootEntry->accept($visitor);

//同じ木構造に対して別のVisitorを使用
$visitor = new CountVisitor();
$rootEntry->accept($visitor);

echo 
'組織数:' $visitor->getGroupCount() . '<br />';
echo 
'従業員数:' $visitor->getEmployeeCount() . '<br />';