{
        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();
Example #2
0
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();