簡介:
門面模式又稱之為外觀模式,屬于結構型的設計模式,
用于為子系統中的一組介面提供一致的呼叫方案,門面模式定義了一個高層介面,引入門面角色之后,只需要直接與門面角色互動,降低了系統的耦合度,
適用場景:
- 最經典的Laravel的Facade,當使用一些庫的時候,不需要了解底層系統如何實作,只需要知道如何使用門面呼叫即可,
- 為一些復雜的子系統提供一個簡單對外開放的呼叫方案,
優點:
- 對客戶端,屏蔽了子系統的實作邏輯,只留出可供使用的方法,讓開發人員很方便的看出來子系統可供呼叫的功能,
- 實作了子系統與呼叫端的松耦合關系,
- 擴展性很強,子類系統不受限制,
缺點:
隔絕了子系統的具體實作代碼,增加代碼溯源的難度,
代碼:
//注:這里的門面寫法和Laravel中的不一樣,Laravel的門面是基于門面模式提供了一套強大且優雅的模塊子系統解決方案,而此處的門面只是一種實作門面思想的示例,
class Facade {
private $pc;
private $mobile;
public function __construct(Mobile $mobile, PC $pc) {
$this->mobile = $mobile;
$this->pc = $pc;
}
public function turnOn() {
$this->mobile->turnOn();
$this->pc->turnOn();
}
public function turnOff() {
$this->pc->turnOff();
$this->mobile->turnOff();
}
}
//子系統介面
interface PC {
public function turnOn();
public function turnOff();
}
//子系統介面
interface Mobile {
public function turnOn();
public function turnOff();
}
//子系統實作
class ASUS implements PC {
public function turnOn() {
echo '華碩電腦開機' . PHP_EOL;
}
public function turnOff() {
echo '華碩電腦關機' . PHP_EOL;
}
}
//子系統實作
class Vivo implements Mobile {
public function turnOn() {
echo 'Vivo手機開機' . PHP_EOL;
}
public function turnOff() {
echo 'Vivo手機關機' . PHP_EOL;
}
}
//呼叫端==========================================
$facade = new Facade(new Vivo(), new ASUS());
$facade->turnOn();
$facade->turnOff();
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/529846.html
標籤:PHP
上一篇:c -如何防止浮點在c 中的函式呼叫時被隱式轉換為整數值?[復制]
下一篇:淺談PHP設計模式的代理模式
