引言
組合模式幫組我們聚合元件,裝飾模式則使用類似節後來幫組我們改變具體元件的功能
問題將所有功能簡歷在整合體系上會導致系統中的類「**式」增多,當你嘗試對整合書上不同的分支做想死的修改是,**可能會產生重複
uml圖
**實現
<?php效果組合和繼承通常都是同時使用的,因此logrequest是繼承自processrequest,但是卻保險為對另外乙個processrequest物件的封裝/*decoration.php
裝飾模式
*/class
requesthelper{}
//抽象基類
abstract
class
processrequest
//具體的元件
class mainprocess extends
processrequest}//
抽象裝飾類
abstract
class decorateprocess extends
processrequest}//
日誌裝飾類
class logrequest extends
decorateprocess}//
認證裝飾類
class authenticaterequest extends
decorateprocess}//
認證裝飾類
class structrerequest extends
decorateprocess}//
client
$process = new authenticaterequest(new structrerequest(new logrequest(new
mainprocess())));
$process ->process(new
requesthelper());
?>
因為修飾物件作為子物件的包裝,所以保持基類中的方法盡可能少是很重要的
讓物件導向程式設計更加靈活的的模式 外觀模式
問題 當使用子系統的 是,有時候發現自己過於深入的呼叫子系統的邏輯 如果子系統 總是不斷變化,而你的 缺又在許多不同地方與子系統 互動,那麼隨著子系統的發展,越來越維護困難,外觀模式要解決的就是使系統中的各層互相獨立,以便專案中某一部分的修改盡量不影響其他地方。實現 外觀模式 function ge...
物件導向的程式設計之工廠模式
工廠模式是軟體工程領域一種廣為人知的設計模式,這種模式抽象了建立具體物件的過程。考慮到在ecmascript中無法建立類,開發人員就發明了一種函式,用函式來封裝以特定介面建立物件的細節,如下面的例子所示。1 function createperson name,age,job 9return o 1...
物件導向的程式設計
物件導向的程式設計 以面向過程的程式設計方式思考 1.確定長方形周長和面積的演算法。c a b 2,s a b 2.編寫兩個方法 函式 分別計算長方形的周長和面積。void double getc double a,double b void double gets double a,double ...