首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Python 外觀模式實戰:統一子系統入口,降低耦合度

     編輯:Java 相關知識

模式意圖

為子系統中的一組接口提供一個統一的高層接口,使子系統更易使用。適用於:

  • 複雜系統需提供簡單入口;
  • 客戶端與多個子系統耦合,需解耦;
  • 層級化系統,外觀定義每層入口。

結構特徵

  • 將原本分散、相關的調用,封裝到一個 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

外觀 vs 代理

維度外觀模式代理模式
目的簡化接口、解耦子系統控制對象訪問、增加額外邏輯
結構組合多個子模塊代理單一對象
接口通常與子系統接口不同,提供新業務語義實現與被代理對象相同接口

總結

外觀模式通過「統一入口」屏蔽子系統複雜性,是架構分層、模塊解耦的利器。隨系統擴展,適時引入外觀可顯著降低維護成本。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved