PHP之外觀模式

2022-02-04 04:05:58 字數 1372 閱讀 6338

當使用子系統的**時,你也許會發現自己過於深入地呼叫子系統的邏輯**。如果子系統**總是在不斷變化,而你的**卻又在許多不同地方與子系統**互動,那麼隨著子系統的發展,你也許會發現維護**變得非常困難。

在專案中整合複雜的第三方**,或在系統中逐漸形成大量僅在系統自身內部有用的**,在這些情況下,你總可以應用外觀模式,為複雜的系統建立乙個簡單、清晰的介面。

假設有下面一段很亂的**,其功能是從檔案中獲取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...