<?php include_once '../../class/pattern/composite.php'; $archer = new Archer(); echo "archer attacking with strength: {$archer->bombardStrength()}" . "<br/>"; $main_army = new Army(); $main_army->addUnit($archer); $main_army->addUnit(new Archer()); $main_army->addUnit(new LaserCannonUnit()); echo "main_army attacking with strength: {$main_army->bombardStrength()}" . "<br/>"; $sub_army = new Army(); $sub_army->addUnit(new Archer()); $sub_army->addUnit(new Cavalry()); $sub_army->addUnit(new Cavalry()); echo "sub_army attacking with strength: {$sub_army->bombardStrength()}" . "<br/>"; $main_army->addUnit($sub_army); echo "main_army attacking with strength: {$main_army->bombardStrength()}" . "<br/>"; $troop = new TroopCarrier(); //$troop->addUnit(new Cavalry); $troop->addUnit(new Archer()); $troop->addUnit(new Archer()); //$troop->addUnit(new Cavalry()); echo "troop attacking with strength: {$troop->bombardStrength()}" . "<br/>"; $main_army->addUnit($troop); echo "attacking with strength: {$main_army->bombardStrength()}" . "<br/>"; ?>
{ public $value = 0; function add(unit $unit) { $this->value += 1; } function getValue() { return $this->vlaue; } function remove(unit $unit) { $this->value = 0; } } class Archer extends unit { function add(unit $unit) { print_r($unit); } function remove(unit $unit) { print_r("Archer::remove()"); } } $main = new Army(); $main->add(new Archer()); $main->add(new Archer()); $sub = new Archer(); $sub->add(new Archer());
} class LaserCannonUnit extends Unit { public function bombardStrength() { return 44; } } class Cavalry extends Unit { public function bombardStrength() { return 15; } } $archer = new Archer(); echo "archer attacking with strength: " . $archer->bombardStrength() . "\n"; $main_army = new Army(); $main_army->addUnit($archer); $main_army->addUnit(new Archer()); $main_army->addUnit(new LaserCannonUnit()); $main_army->addUnit(new Cavalry()); echo "main_army attacking with strength: " . $main_army->bombardStrength() . "\n"; $sub_army = new Army(); $sub_army->addUnit(new Cavalry()); $sub_army->addUnit(new Cavalry()); $main_army->addUnit($sub_army); echo "main_army attacking with strength: " . $main_army->bombardStrength() . "\n"; $troop = new TroopCarrier(); $troop->addUnit(new Archer()); $troop->addUnit(new LaserCannonUnit());
} function bombardStrength() { $ret = 0; foreach ($this->units as $unit) { $ret += $unit->bombardStrength(); } return $ret; } } class UnitException extends Exception { } class Archer extends Unit { function addUnit(Unit $unit) { throw new UnitException(get_class($this) . " is a leaf"); } function removeUnit(Unit $unit) { throw new UnitException(get_class($this) . " is a leaf"); } function bombardStrength() { return 4; } } $archer = new Archer(); $archer2 = new Archer(); $archer->addUnit($archer2);