我的应用程序中有类似外观设计模式的东西。我们可以这样开始: http ://www.patternsforphp.org/doku.php?id=facade
例如:
外观 = 计算机
部件:CPU、内存...
这种情况的解决方案是什么:计算机有一个ID。大多数部分不需要知道计算机 ID,但有几个部分与 World 通信,例如。网卡,需要知道Computer ID放在哪。
怎么办 - 最好的解决方案是什么?
感谢您的回复。
我的应用程序中有类似外观设计模式的东西。我们可以这样开始: http ://www.patternsforphp.org/doku.php?id=facade
例如:
外观 = 计算机
部件:CPU、内存...
这种情况的解决方案是什么:计算机有一个ID。大多数部分不需要知道计算机 ID,但有几个部分与 World 通信,例如。网卡,需要知道Computer ID放在哪。
怎么办 - 最好的解决方案是什么?
感谢您的回复。
如果我了解您想要这样的东西:当您创建特定部分并将其私有存储在对象中时,您需要将 computerId 发送到特定部分。就像在 NetworkDrive 中一样。之后,您可以根据需要使用 computerId。
class CPU
{
public function freeze() { /* ... */ }
public function jump( $position ) { /* ... */ }
public function execute() { /* ... */ }
}
class Memory
{
public function load( $position, $data ) { /* ... */ }
}
class HardDrive
{
public function read( $lba, $size ) { /* ... */ }
}
class NetworkDrive
{
private $computerId;
public function __construct($id)
{
$this->computerId = $id;
}
public function send() { echo $this->computerId; }
}
/* Facade */
class Computer
{
protected $cpu = null;
protected $memory = null;
protected $hardDrive = null;
protected $networkDrive = null;
private $id = 534;
public function __construct()
{
$this->cpu = new CPU();
$this->memory = new Memory();
$this->hardDrive = new HardDrive();
$this->networkDrive = new NetworkDrive($this->id);
}
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();
$this->networkDrive->send();
}
}
/* Client */
$facade = new Computer();
$facade->startComputer();
您可以使用观察者模式来通知 networkDrive 对象以最终更改 computerId