為子系統中的一組接口提供一個統一的高層接口,使子系統更易使用。適用於:
Facade 類中。Facade,不直接依賴子模塊。class ModuleOne:
def create(self): print('create module one instance')
def delete(self): print('delete module one instance')
class ModuleTwo:
def create(self): print('create module two instance')
def delete(self): print('delete module two instance')
class Facade:
def __init__(self):
self.module_one = ModuleOne()
self.module_two = ModuleTwo()
def create_module_one(self): self.module_one.create()
def create_module_two(self): self.module_two.create()
def create_both(self):
self.module_one.create()
self.module_two.create()
def delete_module_one(self): self.module_one.delete()
def delete_module_two(self): self.module_two.delete()
def delete_both(self):
self.module_one.delete()
self.module_two.delete()
外觀類組合子模塊,對外暴露粗粒度(create_both)與細粒度(create_module_one)接口,客戶端按需調用。
class Piece1:
def do_small1(self): print('do small 1')
class Piece2:
def do_small2(self): print('do small 2')
class Piece3:
def do_small3(self): print('do small 3')
class Outside:
def __init__(self):
self._p1 = Piece1()
self._p2 = Piece2()
self._p3 = Piece3()
def method1(self):
self._p1.do_small1()
self._p2.do_small2() # 組合調用
def method2(self):
self._p2.do_small2()
self._p3.do_small3()
if __name__ == '__main__':
osd = Outside()
osd.method1()
osd.method2()
do small 1 do small 2 do small 2 do small 3
| 維度 | 外觀模式 | 代理模式 |
|---|---|---|
| 目的 | 簡化接口、解耦子系統 | 控制對象訪問、增加額外邏輯 |
| 結構 | 組合多個子模塊 | 代理單一對象 |
| 接口 | 通常與子系統接口不同,提供新業務語義 | 實現與被代理對象相同接口 |
外觀模式通過「統一入口」屏蔽子系統複雜性,是架構分層、模塊解耦的利器。隨系統擴展,適時引入外觀可顯著降低維護成本。