实现桥接模式和组合模式示例,添加相关类和方法,增强代码可读性
This commit is contained in:
@@ -0,0 +1,73 @@
|
||||
"""
|
||||
实例
|
||||
汤宝宝成为了上市集团老总,他们集团有好多好多家分公司...
|
||||
"""
|
||||
|
||||
from abc import ABC, abstractmethod
|
||||
|
||||
|
||||
# 抽象类
|
||||
class Company(ABC):
|
||||
name: str
|
||||
children: list["Company"]
|
||||
|
||||
@abstractmethod
|
||||
def show(self, prefix: str) -> None:
|
||||
pass
|
||||
|
||||
@abstractmethod
|
||||
def add(self, company: "Company") -> None:
|
||||
pass
|
||||
|
||||
@abstractmethod
|
||||
def remove(self, company: "Company") -> None:
|
||||
pass
|
||||
|
||||
@abstractmethod
|
||||
def get_child(self, index: int) -> "Company":
|
||||
pass
|
||||
|
||||
|
||||
# 实现类
|
||||
class ConcreteCompany(Company):
|
||||
name: str
|
||||
children: list[Company]
|
||||
|
||||
def __init__(self, name: str) -> None:
|
||||
self.name = name
|
||||
self.children = []
|
||||
|
||||
def show(self, prefix: str) -> None:
|
||||
print(f"{prefix}{self.name}")
|
||||
for child in self.children:
|
||||
child.show(f"{prefix}-> ")
|
||||
|
||||
def add(self, company: Company) -> None:
|
||||
self.children.append(company)
|
||||
print(f"在{self.name}下开设了分公司{company.name}")
|
||||
|
||||
def remove(self, company: Company) -> None:
|
||||
self.children.remove(company)
|
||||
print(f"在{self.name}下关闭了分公司{company.name}")
|
||||
|
||||
def get_child(self, index: int) -> Company:
|
||||
if index < 0 or index >= len(self.children):
|
||||
raise IndexError("子公司索引超出范围")
|
||||
return self.children[index]
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
print("============= 组合模式 =============")
|
||||
|
||||
head_office = ConcreteCompany("汤氏总公司")
|
||||
head_office.add(ConcreteCompany("汤氏A分公司"))
|
||||
head_office.add(ConcreteCompany("汤氏B分公司"))
|
||||
head_office.add(ConcreteCompany("汤氏C分公司"))
|
||||
head_office.get_child(0).add(ConcreteCompany("汤氏A分公司-子公司1"))
|
||||
head_office.get_child(0).add(ConcreteCompany("汤氏A分公司-子公司2"))
|
||||
head_office.remove(head_office.get_child(2))
|
||||
print("\n")
|
||||
head_office.show("~ ")
|
||||
print("\n")
|
||||
head_office.get_child(0).show("~ ")
|
||||
print("\n=========== 组合模式结束 ===========")
|
||||
Reference in New Issue
Block a user