程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 設計模式之---組合模式

設計模式之---組合模式

編輯:C++入門知識

組合模式,是眾多的結構性模式中的一種,想比較之前的橋接模式以及適配器模式,在理解上會有稍稍的難度。

       從組合模式的介紹上來看的話,其實還是不甚了解,以前學過的數據結構中的樹的概念到還能夠想起來一些。

       從網上看到的一些關於這個模式的解釋,也都是一些沒有說到重要地方的解釋,看起來一大堆的東西,基本上沒有講清楚。既然如此麻煩,索性直接自己來通過代碼來理解還好點。

       所謂的樹型結構和樹枝等等概念看起來也比較麻煩。但是從代碼上還是了解到了一些東西。所以就根據自己的所了解的程度進行類圖的繪制。

 

 \

       從上面可以知道,作為樹枝節點的部分雖然也是繼承根節點的,但是在使用上是屬於組合方式提供給樹枝節點使用。

       相當於提供這樣一種情況,就是當一些對象進行組合使用和單獨的繼承都是我需要的情況下,才會采用這種模式。例如,在現在的娛樂公司裡面,往往會推出一些單獨的歌手,自然也會推出一些組合的歌手。而這樣的模式自然就是屬於組合模式了。雖然每個歌手不管是單獨的藝人還是組合中的任何一個,都是屬於歌手中的一個子類。但是,當公司進行調用的時候,往往這兩種情況是不同的,因為就需要推出一些組合和一些單獨演唱的歌手了。

       從上面的例子,再舉一個實際的代碼示例吧。


[cpp]
<SPAN style="FONT-SIZE: 14px">#pragma once 
#include"root.h"  
//單飛歌手  
class leaf:publicroot 

public: 
       leaf(void); 
       ~leaf(void); 
public: 
       voidSinger(); 
}; 
  
#include "root.h"  
#include <vector>  
class compoment:publicroot 

public: 
       compoment(void); 
       ~compoment(void); 
public: 
       voidSinger(); 
private: 
       std::vector<root*> psinger; 
}; 
 </SPAN> 

#pragma once
#include"root.h"
//單飛歌手
class leaf:publicroot
{
public:
       leaf(void);
       ~leaf(void);
public:
       voidSinger();
};
 
#include "root.h"
#include <vector>
class compoment:publicroot
{
public:
       compoment(void);
       ~compoment(void);
public:
       voidSinger();
private:
       std::vector<root*> psinger;
};
 

 

程序的運行結果如下。

     \

這裡需要值得注意一個問題,在樹枝節點的上往往會有葉子節點,而葉子節點的調用方式正是以組合方式調用的。由於調用的方式正是以多個葉子節點一並調用的方式進行的,所以在調用葉子節點的時候,往往要做一些特殊處理的。

而且,這個調用方式在其他的模式中也是暫時沒有看到的,是這個模式的一種特殊的地方,整個組合模式而言,最需要特別注意的地方就是這裡了。

在上述的類圖中,樹枝節點對於根節點的調用就是一種組合方式,在實際操作中,就是通過成員變量的方式進行批量的操作。

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved