static function joinExisting(Unit $newUnit, Unit $occupyingUnit) { $comp = ''; if (!is_null($comp = $occupyingUnit->getComposite())) { $comp->addUnit($newUnit); } else { $comp = new Army(); $comp->addUnit($occupyingUnit); $comp->addUnit($newUnit); } return $comp; }
protected $tile; function __construct(Tile $tile) { $this->tile = $tile; } } class DiamontDecorator extends TileDecorator { function getWealthFactor() { return $this->tile->getWealthFactor() + 5; } } class PollutionDecorator extends TileDecorator { function getWealthFactor() { return $this->tile->getWealthFactor() - 5; } } $tile = new Plains(); $pollution = new PollutionDecorator($tile); print $pollution->getWealthFactor() . "\n"; $army = new Army(); $army->addUnit(new Archer()); $army->addUnit(new LaserCanonUnit()); $sub_army = new Army(); $sub_army->addUnit(new Archer()); $sub_army->addUnit(new LaserCanonUnit()); $army->addUnit($sub_army); print "Атака всей армии составляет {$army->bombardStrength()}";
} } class LaserCannonUnit extends Unit { function bombardStrength() { return 44; } } class Army { private $units = array(); function addUnit(Unit $unit) { array_push($this->units, $unit); } function bombardStrength() { $ret = 0; foreach ($this->units as $unit) { $ret += $unit->bombardStrength(); } return $ret; } } $unit1 = new Archer(); $unit2 = new LaserCannonUnit(); $army = new Army(); $army->addUnit($unit1); $army->addUnit($unit2); print $army->bombardStrength();
<?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/>"; ?>
function removeUnit(Unit $unit) { } function bombardStrength() { return 4; } } class Soldier extends Unit { function addUnit(Unit $unit) { } function removeUnit(Unit $unit) { } function bombardStrength() { return 8; } } $tank = new Tank(); $tank2 = new Tank(); $soldier = new Soldier(); $army = new Army(); $army->addUnit($soldier); $army->addUnit($tank); $army->addUnit($tank2); print_r($army); $army->removeUnit($tank2); print_r($army);
{ if ($unit instanceof Cavalry) { throw new UnitException("Can't get a horse on the vehicle"); } parent::addUnit($unit); } function bombardStrength() { return 0; } } // end previous code class Army extends CompositeUnit { function bombardStrength() { $ret = 0; foreach ($this->units() as $unit) { $ret += $unit->bombardStrength(); } return $ret; } } $main_army = new Army(); $main_army->addUnit(new Archer()); $main_army->addUnit(new LaserCanonUnit()); $sub_army = new Army(); $sub_army->addUnit(new Cavalry()); $main_army->addUnit($sub_army); $main_army->addUnit(new Cavalry()); print $main_army->textDump();