23種設計模式C 原始碼與UML實現 組合模式

2021-10-10 17:40:23 字數 2402 閱讀 9989

組合模式

composite模式也叫做組合模式,是構造型的設計模式之一。通過遞迴的手段構造樹形的物件結構,並可以通過乙個物件來訪問整個物件樹。

component樹形結構的節點抽象

leaf樹形結構的葉節點

composite樹形結構的枝節點

適用於

​ 單個物件的使用具有一致性,將物件組合成樹形結構表示部分--整體

//

// created by andrew on 2020/11/21.

//#include

#include

#include

using

namespace std;

/* * `composite`模式也叫做組合模式,是構造型的設計模式之一。通過遞迴的手段構造樹形的物件結構,並可以通過乙個物件來訪問整個物件樹。

* */

class

ifile

virtual

void

display()

=0;virtual

intadd

(ifile *ifile)=0

;virtual

intremove

(ifile *ifile)=0

;virtual list

>

*getchild()

=0;}

;class

file

:public ifile

void

display

() override

intadd

(ifile *ifile) override

intremove

(ifile *ifile) override

list

>

*getchild

() override

private

: string m_name;};

// 目錄節點

class

dir:

public ifile

void

display

() override

intadd

(ifile *ifile) override

intremove

(ifile *ifile) override

list

>

*getchild

() override

private

:// 父目錄中有乙個或者多個子目錄,因此是個鍊錶, 子目錄能通過父節點得到

string m_name;

list

>

*m_list;};

// 遞迴顯示樹

void

showtree

(ifile *root,

int level)

for(i ==

0; i < level; i++

)// 顯示根節點

root-

>

display()

;// 若根節點有孩子

// 判斷孩子是檔案還是檔案,顯示名字

list

>

*mylist = root-

>

getchild()

;// 獲取子目錄

if(mylist !=

null)(

*it)

->

display()

;}else}}

}int

main

(int argc,

char

*ar**)

dir *dir2 =

newdir

("dir2");

file *bfile =

newfile

("b.txt");

dir1-

>

add(dir2)

; dir1-

>

add(bfile)

; cout <<

"通過 showtree 方式顯示root節點下的所有子節點"

<< endl;

showtree

(root,0)

; cout <<

"composite pattern"

<< endl;

return0;

}

23種設計模式C 原始碼與UML實現 原型模式

原型模式 乙個複雜物件,具有自我複製功能,統一一套介面。原型模式主要面對的問題是 某些結構複雜的物件的建立工作,由於需求的變化,這些物件進場面對著劇烈的變化,但是他們卻擁有比較一致的介面。原型模式 prototype pattern 是用於建立重複的物件,同時又能保證效能。這種型別的設計模式屬於建立...

23種設計模式C 原始碼與UML實現 解釋模型

解釋模型 一些應用提供了內建的指令碼或者巨集語言來讓使用者可以定義它們能夠在系統中進行的操作。interpreter模式的目的就是使用乙個直譯器為使用者提供乙個一門定義語言的語法表示的直譯器,然後通過這個直譯器來解釋語言中的句子。interpreter模式提供了這樣乙個實現直譯器的框架。interp...

23種設計模式C 原始碼與UML實現 迭代器模式

迭代器模式 iterator模式也叫迭代模式,是行為模式之一,他把對容器種包含的內部物件的訪問委讓給外部類,使用iterator按順序進行遍歷訪問的設計模式。在使用iterator模式之前,首先應該明白iterator模式是用來解決什麼問題的。或者說如果不使用iterator模式會存在什麼問題。由容...