1. 程式人生 > 其它 >【Python】使用smtplib模組發郵件報錯“smtplib.SMTPDataError: 554, 5.2.0”

【Python】使用smtplib模組發郵件報錯“smtplib.SMTPDataError: 554, 5.2.0”

外觀模式的定義與特點

外觀(Facade)模式又叫作門面模式,是一種通過為多個複雜的子系統提供一個一致的介面,而使這些子系統更加容易被訪問的模式。該模式對外有一個統一介面,外部應用程式不用關心內部子系統的具體細節,這樣會大大降低應用程式的複雜度,提高了程式的可維護性。

在日常編碼工作中,我們都在有意無意的大量使用外觀模式。只要是高層模組需要排程多個子系統(2個以上的類物件),我們都會自覺地建立一個新的類封裝這些子系統,提供精簡的介面,讓高層模組可以更加容易地間接呼叫這些子系統的功能。尤其是現階段各種第三方SDK、開源類庫,很大概率都會使用外觀模式。

外觀(Facade)模式是“迪米特法則”的典型應用,它有以下主要優點。

  1. 降低了子系統與客戶端之間的耦合度,使得子系統的變化不會影響呼叫它的客戶類。

  2. 對客戶遮蔽了子系統元件,減少了客戶處理的物件數目,並使得子系統使用起來更加容易。

  3. 降低了大型軟體系統中的編譯依賴性,簡化了系統在不同平臺之間的移植過程,因為編譯一個子系統不會影響其他的子系統,也不會影響外觀物件。

外觀(Facade)模式的主要缺點如下。

  1. 不能很好地限制客戶使用子系統類,很容易帶來未知風險。

  2. 增加新的子系統可能需要修改外觀類或客戶端的原始碼,違背了“開閉原則”。

外觀模式的結構與實現

外觀(Facade)模式的結構比較簡單,主要是定義了一個高層介面。它包含了對各個子系統的引用,客戶端可以通過它訪問各個子系統的功能。現在來分析其基本結構和實現方法。

1. 模式的結構

外觀(Facade)模式包含以下主要角色。

  1. 外觀(Facade)角色:為多個子系統對外提供一個共同的介面。

  2. 子系統(Sub System)角色:實現系統的部分功能,客戶可以通過外觀角色訪問它。

  3. 客戶(Client)角色:通過一個外觀角色訪問各個子系統的功能。

其結構圖如圖 2 所示。