組合模式
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模式會存在什麼問題。由容...