封裝是實現良好模組化的關鍵,它讓模組不需知道系統其他部分,減少系統變化時要修改的地方。

Hide Delegate
除了常見的封裝欄位,我們也可用某物件(Department)封裝另個物件(Manager)。
這樣當 Manager 被修改時,對應修改只會延伸到 Department 為止。
flowchart LR
subgraph before ["❌ 暴露委託"]
direction LR
C1[Client] --> E1[Employee]
E1 --> D1[Department]
D1 --> M1[Manager]
end
subgraph after ["✅ 隱藏委託"]
direction LR
C2[Client] --> E2[Employee]
E2 -.->|getManager| D2[Department]
D2 -.-> M2[Manager]
end
before --> after
Hide Delegate — delegation model
# Before
class Department:
def __init__(self, manager):
self.manager = manager
class Employee:
def __init__(self, name, department):
self.name = name
self.department = department
department = Department("Alice")
employee = Employee("Bob", department)
print(f"Manager: {employee.department.manager}")
# After
class Department:
def __init__(self, manager):
self.manager = manager
def get_manager(self):
return self.manager
class Employee:
def __init__(self, name, department):
self.name = name
self.department = department
def get_manager(self):
return self.department.get_manager()
department = Department("Alice")
employee = Employee("Bob", department)
print(f"Manager: {employee.get_manager()}")