<!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 />';