国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > PHP > 正文

裝飾模式詳解

2024-05-04 21:50:59
字體:
供稿:網(wǎng)友

裝飾模式:在不必改變原類文件和使用繼承的情況下,動態(tài)地擴展一個對象的功能。它是通過創(chuàng)建一個包裝對象,也就是裝飾來包裹真實的對象。

裝飾模式的特點

(1) 裝飾對象和真實對象有相同的接口。這樣客戶端對象就能以和真實對象相同的方式和裝飾對象交互。

(2) 裝飾對象包含一個真實對象的引用(reference)

(3) 裝飾對象接受所有來自客戶端的請求。它把這些請求轉(zhuǎn)發(fā)給真實的對象。

(4) 裝飾對象可以在轉(zhuǎn)發(fā)這些請求以前或以后增加一些附加功能。這樣就確保了在運行時,不用修改給定對象的結(jié)構(gòu)就可以在外部增加附加的功能。在面向?qū)ο蟮脑O(shè)計中,通常是通過繼承來實現(xiàn)對給定類的功能擴展。

優(yōu)點:

1. Decorator模式與繼承關(guān)系的目的都是要擴展對象的功能,但是Decorator可以提供比繼承更多的靈活性。

2. 通過使用不同的具體裝飾類以及這些裝飾類的排列組合,設(shè)計師可以創(chuàng)造出很多不同行為的組合。

缺點:

1. 這種比繼承更加靈活機動的特性,也同時意味著更加多的復(fù)雜性。

2. 裝飾模式會導(dǎo)致設(shè)計中出現(xiàn)許多小類,如果過度使用,會使程序變得很復(fù)雜。

3. 裝飾模式是針對抽象組件(Component)類型編程。但是,如果你要針對具體組件編程時,就應(yīng)該重新思考你的應(yīng)用架構(gòu),以及裝飾者是否合適。當(dāng)然也可以改變Component接口,增加新的公開的行為,實現(xiàn)“半透明”的裝飾者模式。在實際項目中要做出最佳選擇。

php代碼實例

抽象一個工人類具有工作方法,2個子類(水管工、木工)實現(xiàn)了工人接口:

  1. interface worker{ 
  2.  
  3. public function doSomeWork(); 
  4.  
  5.  
  6. //水管工 
  7.  
  8. class shuiguan implements worker{ 
  9.  
  10. public function doSomeWork(){ 
  11.  
  12. echo '修水管'
  13.  
  14.  
  15.  
  16. //木工 
  17.  
  18. class mu implements worker{ 
  19.  
  20. public function doSomeWork(){ 
  21.  
  22. echo '修門窗'
  23. //Vevb.com 
  24.  

現(xiàn)在有新的需求a公司的工人(包含水管、木工)進門要求先說“您好!”,我們想在不影響基礎(chǔ)類的情況下統(tǒng)一實現(xiàn)這個功能。我們可以使用裝飾模式類實現(xiàn):

  1. //a公司工人 
  2.  
  3. class aWorker implements worker{ 
  4.  
  5. //具體的工人 
  6.  
  7. public $worker
  8.  
  9. //構(gòu)造函數(shù)獲取工人 
  10.  
  11. public function __construct($worker){ 
  12.  
  13. $this->worker  = $worker
  14.  
  15.  
  16. public function doSomeWork(){ 
  17.  
  18. echo '您好!'
  19.  
  20. $this->worker->doSomeWork(); 
  21.  
  22.  
  23.  
  24. $aWorker = new aWorker(new shuiguan()); 
  25.  
  26. $aWorker->doSomeWork(); 

aWorker 同樣實現(xiàn)了worker類的接口,它需要一個具體的工人對象,在執(zhí)行完特殊要求(說您好)后使用原有工人對象的方法。這就是裝飾模式!

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 栾川县| 惠水县| 拉孜县| 福贡县| 阿尔山市| 北川| 西充县| 阜新| 九江市| 和田县| 枣强县| 静海县| 石家庄市| 额敏县| 南宫市| 深州市| 普定县| 郑州市| 家居| 上思县| 彰化县| 信宜市| 南宫市| 依兰县| 江安县| 雷山县| 海原县| 监利县| 高州市| 安康市| 盐山县| 兰溪市| 永新县| 新泰市| 东丰县| 南涧| 高唐县| 呼图壁县| 轮台县| 遂川县| 平度市|