python文件合法模式组合_python设计模式之组合模式
最開始接觸組合設計模式是在大話設計模式這本書中的案例,講的是讓你設計一個公司的組織架構,一個總公司下有人力資源部門,IT部門, 財務部門,還有廣州分公司、深圳分公司,在分公司下也有IT部門和財務部門,讓你用代碼構建出來,然后在自學數(shù)據(jù)結構關于樹型結構的時候,讓你用python代碼實現(xiàn)一個二叉樹, 最后第三次是在學習李建忠老師的23種設計模式時,感覺打通了任督二脈,明白組合設計模式本質上是一種樹形的數(shù)據(jù)結構型模式。為什么這么說呢,接下來我們看一下它的官方定義和示例。
組合設計模式GOF官方定義: 將對象組合成樹形結構以表示“部分-整體”的層次結構,使得用戶對單個對象和組合對象的使用具有一致性。
類結構圖如下:
首先我們用python代碼和組合設計模式來實現(xiàn)一個公司的組織架構。
01、設計節(jié)點基類
classDepartment:"""部門基類"""
def __init__(self, name):
self.name=namedefdisplay(self):pass
classCompany(Department):"""公司基類"""
def __init__(self, name):
self.department_list=list()
super().__init__(name)defadd(self, department: Department):
self.department_list.append(department)defremove(self, department: Department):
self.department_list.remove(department)defdisplay(self, a=None):#這里有點遞歸的味道
for department inself.department_list:
department.display(self.name)
02、設計部門類
classITDepartment(Department):"""IT部門"""
defdisplay(self, company):print("這是" + company +self.name)classFinanceDepartment(Department):"""財務部門"""
defdisplay(self, company):print("這是" + company + self.name)
03、設計分公司類
classGuangZhouCompany(Company):"""廣州分公司"""
classShenZhenCompany(Company):"""深圳分公司"""
04、設計和運行主程序
if __name__ == "__main__":
root= Company("總公司")
g_company= GuangZhouCompany("廣州分公司")
s_company= ShenZhenCompany("深圳分公司")
it_department= ITDepartment("總部IT部門")
git_department= ITDepartment("廣州IT部門")
sit_department= ITDepartment("深圳IT部門")
f_department= FinanceDepartment("總部財務部門")
gf_department= FinanceDepartment("廣州財務部門")
sf_department= FinanceDepartment("深圳財務部門")
root.add(g_company)
root.add(s_company)
root.add(it_department)
root.add(f_department)
g_company.add(git_department)
g_company.add(gf_department)
s_company.add(sf_department)
s_company.add(sit_department)
root.display(None)
運行結果如下:
/usr/local/bin/python3.7 /Users/bytedance/PycharmProjects/untitled3/組合設計模式/組合設計模式.py
這是廣州分公司廣州IT部門
這是廣州分公司廣州財務部門
這是深圳分公司深圳財務部門
這是深圳分公司深圳IT部門
這是總公司總部IT部門
這是總公司總部財務部門
Process finished with exit code 0
05、總結
組合模式采用樹形結構來實現(xiàn)普遍存在的對象容器, 從而將“一對多”的關系轉化成“一對一”的關系, 使得客戶代碼可以一致地處理對象和對象容器,無需關系處理的是單個對象,還是組合對象。
將“客戶代碼與復雜的對象容器結構”解耦是組合模式的核心, 解耦之后,客戶代碼將與純粹的抽象接口--而非對象容器的內部實現(xiàn)結構發(fā)生依賴, 從而更能應對變化。
組合模式在具體實現(xiàn)中,可以讓父對象中的子對象反向追溯;如果父對象有頻繁的遍歷需求可使用緩存技巧來改善效率。
總結
以上是生活随笔為你收集整理的python文件合法模式组合_python设计模式之组合模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据交换平台_从零开始理解大数据架构之数
- 下一篇: r k-means 分类结果_机器学习-