{ return "data from sector {$sector} ({$size})"; } } // Facade class Computer { const BOOT_ADDRESS = 0; const BOOT_SECTOR = 1; const SECTOR_SIZE = 16; protected $cpu; protected $mem; protected $hd; public function __construct(CPU $cpu, Memory $mem, Disk $hd) { $this->cpu = $cpu; $this->mem = $mem; $this->hd = $hd; } public function startComputer() { $this->cpu->freeze(); $this->mem->load(self::BOOT_ADDRESS, $this->hd->read(self::BOOT_SECTOR, self::SECTOR_SIZE)); $this->cpu->jump(self::BOOT_ADDRESS); $this->cpu->execute(); } } // Usage example $pc = new Computer(new CPU(), new Memory(), new Disk()); $pc->startComputer();
class HardDrive { public function read($lba, $size) { /* ... */ } } /* Фасад */ class Computer { protected $cpu; protected $memory; protected $hardDrive; public function __construct() { $this->cpu = new CPU(); $this->memory = new Memory(); $this->hardDrive = new HardDrive(); } public function startComputer() { $this->cpu->freeze(); $this->memory->load(BOOT_ADDRESS, $this->hardDrive->read(BOOT_SECTOR, SECTOR_SIZE)); $this->cpu->jump(BOOT_ADDRESS); $this->cpu->execute(); } } /* Клиентская часть */ $facade = new Computer(); $facade->startComputer();