這可能是你第一個接觸到的Design Pattern - 叡揚資訊
文章推薦指數: 80 %
這次要跟大家介紹的是Composite Pattern,這是GoF(Gang of Four)經典的23種設計模式之一,GoF把設計模式分為三種: Creational Patterns; Structural ...
在這個園地裡我們將從技術、專案管理、客戶對談面和大家分享我們多年的經驗,希望大家不管是喜歡或是有意見,都可以回饋給我們,讓我們有機會和大家對話並一起成長!
若有任何問題請來信:[email protected]
3分鐘閱讀時間
(557個字)
字體大小:
+
–
訂閱
取消訂閱
[DesignPattern]這可能是你第一個接觸到的DesignPattern
設計
2021/08/29,週日
1561點擊
0評論
簡介
這次要跟大家介紹的是CompositePattern,這是GoF(GangofFour)經典的23種設計模式之一,GoF把設計模式分為三種:
CreationalPatterns
StructuralPatterns
BehavioralPatterns
CompositePattern被歸類在StructuralPatterns,這類設計模式著重在類別及物件的組合,形成更龐雜的結構,從而實現新的功能。
Compositepattern的官方定義:將物件(objects)組合(compose)成樹狀結構以表示part-wholehierarchies(可參見文末連結,此處不贅述),這使客戶(clients)能夠一致地(uniformly)對待單個物件和物件的組合。
大家熟悉的檔案系統就是一種Compositepattern的實現,我們進入檔案系統基本上只會看到資料夾(Directory)和檔案(file)這兩種物件,一個資料夾可以包含任意數量的檔案或是資料夾,這麼一來就形成了樹狀的結構,而我們都可以對其進行刪除或是重新命名的動作,這就是定義所說的一致性對待。
只要遇到階層或是樹狀的結構都可以評估看看是否需要套用Compositepattern。
實作
此範例是採用C#實作簡易版的公司職員管理,下圖為UML類別圖,僅有2個類別實作1個介面。
UML類別圖-CompositePattern簡易實作
Program.cs
usingSystem;
usingSystem.Collections.Generic;
namespaceCompositePattern
{
interfaceIEmployee
{
//Tosetanemployeename
stringName{get;set;}
//Tosetanemployeedepartment
stringDept{get;set;}
//Tosetanemployeedesignation
stringDesignation{get;set;}
//Todisplayanemployeedetails
voidDisplayDetails();
}
//LeafNode
classEmployee:IEmployee
{
publicstringName{get;set;}
publicstringDept{get;set;}
publicstringDesignation{get;set;}
//Detailsofaleafnode
publicvoidDisplayDetails()
{
Console.WriteLine($"\t{Name}隸屬於{Dept}頭銜:{Designation}");
}
}
//Non-leafnode
classCompositeEmployee:IEmployee
{
publicstringName{get;set;}
publicstringDept{get;set;}
publicstringDesignation{get;set;}
//下屬容器
privateList
main函數是C#程式運行的起始點,可以視為用戶端(client),範例中我們在其中進行了各式操作:
呼叫AddEmployee方法來新增員工,形成樹狀結構
呼叫DisplayDetails方法來顯示員工明細(for迴圈走訪樹狀結構)
呼叫RemoveEmployee方法,移除樹狀結構中的node(CompositeEmployee)或leaf(Employee)
整個樹狀結構中CompositeEmployee作為node,Employee作為leaf,這兩個類別共同實作了IEmployee介面,達到了一致性的對待(都可以顯示員工明細)。
part-wholehierarchies補充說明連結 https://www.open.edu/openlearn/ocw/mod/oucontent/view.php?id=82521§ion=1.3
你覺得這篇文章怎麽樣?
開心(0)
喜愛(0)
驚奇(0)
悲傷(0)
生氣(0)
標籤:
2021部落格鐵人賽
DesignPattern
Composite
讓語言學習模型玩歌曲填詞
.NetCore偵測指定檔案或目錄變化時自動執行某些動作
相關文章
讓語言學習模型玩歌曲填詞
經驗分享
.NetCore偵測指定檔案或目錄變化時自動執行某些動作
經驗分享
SeeTestClient連上實體手機
經驗分享
使用OPENJSON及FORJSON剖析及轉換JSON資料(MSSQL)
經驗分享
如何在Hangfire上實作自訂工作重試處理
程式語言
[.Netcore]HttpMessageResponseDownloadFilenotwork
經驗分享
評論
尚無評論
已經注冊了? 這裡登入
Guest
2022/07/11,週一
Captcha圖像
提交您的評論
文章歸檔
2022
一月 (1)
二月 (12)
五月 (1)
2021
三月 (41)
四月 (42)
五月 (34)
六月 (34)
七月 (54)
八月 (28)
九月 (1)
十月 (2)
十一月 (6)
十二月 (3)
2020
一月 (1)
五月 (1)
七月 (13)
八月 (1)
九月 (3)
十月 (2)
十一月 (1)
十二月 (5)
2019
一月 (2)
二月 (1)
三月 (3)
四月 (2)
五月 (6)
六月 (2)
八月 (2)
十月 (2)
十二月 (3)
2018
二月 (5)
三月 (2)
四月 (4)
五月 (2)
六月 (2)
七月 (3)
八月 (7)
九月 (2)
十月 (5)
十一月 (2)
十二月 (4)
2017
一月 (2)
二月 (2)
三月 (4)
四月 (8)
五月 (4)
六月 (4)
七月 (5)
八月 (1)
九月 (2)
十月 (5)
十一月 (4)
十二月 (2)
2016
九月 (15)
十月 (6)
十一月 (6)
十二月 (2)
熱門類別
經驗分享
196
程式語言
184
.NET
47
.NETMVC
13
C#
7
Java
6
TypeScript
3
Python
1
工具平台
73
前端
68
資訊安全
27
最新評論
Guest-TSUN
11五月2022
玩轉Fiddler-HTTP(s)抓包能手&常見「特殊」用途
講得不錯,某速食報報剛推出當年就試過了,不小心用到沒有的優惠還被通報上去,隔天官網公告了(誤隨意下載來路不明的報報APP)...
Guest-邱柏仁
29三月2022
[.Netcore]HttpMessageResponseDownloadFilenotwork
既然都要讀取檔案了,怎麼不PhysicalFile就好了呢?
PatricyChang(張淑娟)
測試工具Recorder
以公文自訂的attribute為例:data-speed-id="CreateDraft"SideeX-非TAC錄到的大概有這樣的資料:
//li[2]/a[1]/span[1]css...
Guest-請教您.李禹叡
11一月2022
玩轉Fiddler-HTTP(s)抓包能手&常見「特殊」用途
請教您.李禹叡、
玩轉Fiddler-HTTP(s)抓包能手&常見「特殊」用途2021/08/24,週二
叡揚資訊我在微信裡有小額通內上課回播影片、要下載錄影的片子!我、不懂的地方!
請...
RyanLee(李禹叡)
為什麼程式需要單元測試?-視覺化篇
補一下NetFramework+Xunit的Sample
https://jenkins.gss.com.tw/job/WebGoat.Net_2019_XUnitTest/
標籤雲
asp.net
ASP.NETCore
Asp.NetMVC
.NET
#javascript
2021部落格鐵人賽
js
前端
security
資安
SQL
資訊安全
IIS
docker
jenkins
git
ux
ChatBot
前端工程
TypeScript
延伸文章資訊
- 1這可能是你第一個接觸到的Design Pattern - 叡揚資訊
這次要跟大家介紹的是Composite Pattern,這是GoF(Gang of Four)經典的23種設計模式之一,GoF把設計模式分為三種: Creational Patterns; St...
- 2設計模式(電腦) - 維基百科,自由的百科全書
在軟體工程中,設計模式(design pattern)是對軟體設計中普遍存在(反覆出現)的各種問題,所提出的解決方案。這個術語是由埃里希·伽瑪(Erich Gamma)等人在1990年代 ...
- 3主題|設計模式 - 天瓏網路書店
設計模式(Design Patterns)一直是門易學難精的學問,開發人員從初出茅廬拿規格寫程式、程式會動就好的coder,到想讓自己精進到有設計概念的programmer,能設計出具有 ...
- 4為什麼要學Design Pattern
一般軟體圈講的設計模式是指GoF 的23個design pattern ,而GoF 的23個設計模式全名是object oriented design pattern,所以設計模式是指在物件導向...
- 5[ Day 1 ] 我為什麼想學設計模式( Design Pattern ) - iT 邦幫忙
在軟體工程中,設計模式(design pattern)是對軟體設計中普遍存在(反覆出現)的各種問題,所提出的解決方案。這個術語是由埃里希·伽瑪(Erich Gamma)等人在1990年代 ...