當使用子系統的**時,你也許會發現自己過於深入地呼叫子系統的邏輯**。如果子系統**總是在不斷變化,而你的**卻又在許多不同地方與子系統**互動,那麼隨著子系統的發展,你也許會發現維護**變得非常困難。
在專案中整合複雜的第三方**,或在系統中逐漸形成大量僅在系統自身內部有用的**,在這些情況下,你總可以應用外觀模式,為複雜的系統建立乙個簡單、清晰的介面。
假設有下面一段很亂的**,其功能是從檔案中獲取log資訊並將它轉換為物件:
function getproductfilelines($file)
function getproductobjectfromid($id, $productname)
function getnamefromline()
return '';
}function getidfromline($line)
)-/", $line, $array))
return -1;
}class product()
}
我們的目的是將包含類似下面資料的檔案轉換為乙個物件陣列:
234-ladies_jumper 55
532-gents_hat 44
客戶端使用該功能時要呼叫所有的方法:
$lines = getproductfilelines('text.txt');
$objects = array();
foreach ($lines as $line)
如果在專案中直接呼叫這些方法,那麼我們的**會和子系統緊緊耦合在一起。當子系統變化時,或者我們決定將其與子系統完全斷開時,**就會出問題。
下面這個簡單的類為上面的過程式**提供了乙個介面:
class productfacade
private function complie()
}function getproducts()
function getproduct($id)
}
現在,從乙個log檔案訪問product物件就簡單多了:
$facade = new productfacade('test.txt');
$facade->getproduct(234);
外觀模式的好處:(1)對於呼叫者來說,訪問**變得簡潔、非常方便.(2),由於只在乙個地方呼叫子系統,減少了出錯的可能.(3),facade類還能使呼叫者避免不正確地使用內部方法,從而減少錯誤的發生。
ps1:這是《深入php:面對物件、模式與實踐》第十章的部分內容(其他的都看不懂,逃~)
ps2:此文章也可以在我單獨的部落格裡面看到: php之外觀模式
PHP 設計模式之外觀模式 Facade
外觀模式 facade pattern 為子系統中的一組介面提供乙個統一的高層介面,使得子系統更容易使用。外觀模式又稱為門面模式,它是一種物件結構型模式,遵循迪公尺特法則,又稱最少知道原則。現代的軟體系統都非常複雜,儘管我們已經想盡一切方法將其 分而治之 把乙個系統劃分為好幾個較小的子系統了,但是仍...
PHP設計模式之外觀(門面)模式
外觀模式 只是為乙個分層或子系統建立乙個單一的入口。外觀類,它需要了解所有的子系統的方法或屬性,進行組合,以備外界呼叫 class facade function methoda function methodb function methodn facade new facade facade m...
java之外觀模式
外觀模式 facade 外觀模式是為了解決類與類之家的依賴關係的,像spring一樣,可以將類和類之間的關係配置到配置檔案中,而外觀模式就是將他們的關係放在乙個facade類中,降低了類類之間的耦合度,該模式中沒有涉及到介面 我們以乙個計算機的啟動過程為例 public class cpu publ...