我在我的應用程序中有類似於外觀設計模式的東西。我們可以開始這樣的: http://www.patternsforphp.org/doku.php?id=facade外觀設計模式,從外觀獲取屬性
從例如:
門面=電腦
配件:CPU,內存...
而且該解決方案,這是什麼情況:計算機有一個ID。大部分零件不需要知道計算機ID,但有幾個零件與世界通信,例如,網卡需要知道放置的計算機ID。
怎麼辦 - 什麼是最好的解決方案?
感謝您的回覆。
我在我的應用程序中有類似於外觀設計模式的東西。我們可以開始這樣的: http://www.patternsforphp.org/doku.php?id=facade外觀設計模式,從外觀獲取屬性
從例如:
門面=電腦
配件:CPU,內存...
而且該解決方案,這是什麼情況:計算機有一個ID。大部分零件不需要知道計算機ID,但有幾個零件與世界通信,例如,網卡需要知道放置的計算機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
是的,就是這樣。但是......我有一種不好的感覺,就是將計算機的「ID」存儲在多個對象中,而不是一個。 (一致性 - 改變計算機的ID等) –
所以我認爲,我需要像NetworkCard中的計算機實例指針而不是ID。 (我們可以設置該計算機有方法getId())。 –
當您更改計算機ID時,可以使用觀察者模式,並通知NetworkDrive對象更改存儲的計算機ID。可以是一個解決方案。您無法發送參考,因爲您可以更改網絡驅動器中的值,但這不太好。您可以發送整個對象計算機,並使用您需要使用的($ this-> networkDrive = new NetworkDrive($ this);)。我建議使用觀察模式 –
的最終變化。如果我編寫的代碼,我不知道這個部分,那就是門面 - 這自然而然地上升。但是,如果代碼仍然非常好,並且一致性問題仍然存在,那麼這是很複雜的。如果ID會改變怎麼辦? –
你能澄清這個問題嗎?因爲現在我不明白你在問什麼。 Facade定義了一個更高級別的界面,使得子系統更易於使用。 – Gordon
實際上:我有靜態類與方法Javascript :: addVariable()攜帶從PHP到JavaScript的變量。外觀的某些部分需要將一些變量傳遞給javascript,但在JavaScript中,我需要將這些值分配給計算機。 –