欧美大屁股bbbbxxxx,狼人大香伊蕉国产www亚洲,男ji大巴进入女人的视频小说,男人把ji大巴放进女人免费视频,免费情侣作爱视频

歡迎來到入門教程網(wǎng)!

C語言

當(dāng)前位置:主頁 > 軟件編程 > C語言 >

簡單了解設(shè)計模式中的裝飾者模式及C++版代碼實現(xiàn)

來源:本站原創(chuàng)|時間:2020-01-10|欄目:C語言|點擊: 次

由遇到的問題引出的裝飾模式

在 OO 設(shè)計和開發(fā)過程,可能會經(jīng)常遇到以下的情況:我們需要為一個已經(jīng)定義好的類添加新的職責(zé)(操作),通常的情況我們會給定義一個新類繼承自定義好的類,這樣會帶來一個問題(將在本模式的討論中給出)。通過繼承的方式解決這樣的情況還帶來了系統(tǒng)的復(fù)雜性,因為繼承的深度會變得很深。

而裝飾提供了一種給類增加職責(zé)的方法,不是通過繼承實現(xiàn)的,而是通過組合。

有關(guān)這些內(nèi)容在討論中進(jìn)一步闡述。
模式選擇
裝飾模式典型的結(jié)構(gòu)圖為:

在 結(jié) 構(gòu) 圖 中 , ConcreteComponent 和裝飾需 要 有 同 樣 的 接 口 , 因 此ConcreteComponent 和裝飾有著一個共同的父類。這里有人會問,讓裝飾直接維護(hù)一個指向 ConcreteComponent 引用(指針)不就可以達(dá)到同樣的效果,答案是肯定并且是否定的??隙ǖ氖悄憧梢酝ㄟ^這種方式實現(xiàn),否定的是你不要用這種方式實現(xiàn),因為通過這種方式你就只能為這個特定的 ConcreteComponent 提供修飾操作了,當(dāng)有了一個新的ConcreteComponent 你 又 要 去 新 建 一 個裝飾來 實 現(xiàn) 。 但 是 通 過 結(jié) 構(gòu) 圖 中 的ConcreteComponent 和裝飾有一個公共基類,就可以利用 OO 中多態(tài)的思想來實現(xiàn)只要是 Component 型別的對象都可以提供修飾操作的類,這種情況下你就算新建了 100 個Component 型別的類 ConcreteComponent,也都可以由裝飾一個類搞定。這也正是裝飾模式的關(guān)鍵和威力所在了。

當(dāng)然如果你只用給 Component 型別類添加一種修飾,則裝飾這個基類就不是很必要了。

實例

#include <iostream> 
using namespace std; 
 
class TestA 
{ 
public: 
  void display_a() 
  { 
    cout<<"display a..."<<endl; 
  } 
}; 
 
class TestB 
{ 
public: 
  void display_b() 
  { 
    cout<<"display b..."<<endl; 
  } 
}; 
 
class Facade 
{ 
  TestA *testa; 
  TestB *testb; 
 
public: 
  Facade() 
  { 
    testa = new TestA(); 
    testb = new TestB(); 
  } 
  ~Facade() 
  { 
    delete testa; 
    delete testb; 
  } 
 
  void MethodA() 
  { 
    testa->display_a(); 
    testb->display_b(); 
  } 
}; 
 
int main() 
{ 
  Facade *facade = new Facade(); 
   
  facade->MethodA(); 
 
  system("pause"); 
  return 0; 
} 

上一篇:C++的靜態(tài)聯(lián)編和動態(tài)聯(lián)編

欄    目:C語言

下一篇:簡單總結(jié)C語言中各種類型的指針的概念

本文標(biāo)題:簡單了解設(shè)計模式中的裝飾者模式及C++版代碼實現(xiàn)

本文地址:http://mengdiqiu.com.cn/a1/Cyuyan/2456.html

網(wǎng)頁制作CMS教程網(wǎng)絡(luò)編程軟件編程腳本語言數(shù)據(jù)庫服務(wù)器

如果侵犯了您的權(quán)利,請與我們聯(lián)系,我們將在24小時內(nèi)進(jìn)行處理、任何非本站因素導(dǎo)致的法律后果,本站均不負(fù)任何責(zé)任。

聯(lián)系QQ:835971066 | 郵箱:835971066#qq.com(#換成@)

Copyright © 2002-2020 腳本教程網(wǎng) 版權(quán)所有