Python與設計模式--門面模式

8-Python與設計模式–門面模式

一、火警報警器(1)

假設有一組火警報警系統,由三個子元件構成:一個警報器,一個噴水器,
一個自動撥打電話的裝置。其抽象如下:

class AlarmSensor:def run(self):print "Alarm Ring..."
class WaterSprinker:def run(self):print "Spray Water..."
class EmergencyDialer:def run(self):print "Dial 119..."

在業務中如果需要將三個部件啟動,例如,如果有一個煙霧傳感器,檢測到了煙霧。
在業務環境中需要做如下操作:

if __name__=="__main__":alarm_sensor=AlarmSensor()water_sprinker=WaterSprinker()emergency_dialer=EmergencyDialer()alarm_sensor.run()water_sprinker.run()emergency_dialer.run()

但如果在多個業務場景中需要啟動三個部件,怎么辦?Ctrl+C加上Ctrl+V么?

當然可以這樣,但作為碼農的基本修養之一,減少重復代碼是應該會被很輕易想到的方法。這樣,需要將其進行封裝,在設計模式中,被封裝成的新對象,叫做門面。
門面構建如下:

class EmergencyFacade:def __init__(self):self.alarm_sensor=AlarmSensor()self.water_sprinker=WaterSprinker()self.emergency_dialer=EmergencyDialer()def runAll(self):self.alarm_sensor.run()self.water_sprinker.run()self.emergency_dialer.run()

這樣,業務場景中這樣寫就可以了:

if __name__=="__main__":emergency_facade=EmergencyFacade()emergency_facade.runAll()

打印如下:

Alarm Ring… Spray Water… Dial 119…

二、門面模式

門面模式也叫外觀模式,定義如下:要求一個子系統的外部與其內部的通信必須通過一個統一的對象進行。
門面模式提供一個高層次的接口,使得子系統更易于使用。門面模式注重“統一的對象”,也就是提供一個訪問
子系統的接口。門面模式與之前說過的模板模式有類似的地方,都是對一些需要重復方法的封裝。
但從本質上來說,是不同的。模板模式是對類本身的方法的封裝,其被封裝的方法也可以單獨使用;
而門面模式,是對子系統的封裝,其被封裝的接口理論上是不會被單獨提出來用的。

三、門面模式的優點和使用場景

優點:
1、減少了系統之間的相互依賴,提高了系統的靈活;
2、提高了整體系統的安全性:封裝起的系統對外的接口才可以用,隱藏了很多內部接口細節,若方法不允許使用,則在門面中可以進行靈活控制。使用場景:
1、為一個復雜的子系統提供一個外界訪問的接口。這類例子是生活還是蠻常見的,例如電視遙控器的抽象模型,電信運營商的用戶交互設備等;
2、需要簡化操作界面時。例如常見的扁平化系統操作界面等,在生活中和工業中都很常見。

四、門面模式的缺點

1、門面模式的缺點在于,不符合開閉原則,一旦系統成形后需要修改,幾乎只能重寫門面代碼,
這比繼承或者覆寫等方式,或者其它一些符合開閉原則的模式風險都會大一些。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/166745.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/166745.shtml
英文地址,請注明出處:http://en.pswp.cn/news/166745.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

c語言習題1124

分別定義函數求圓的面積和周長。 寫一個函數,分別求三個數當中的最大數。 寫一個函數,計算輸入n個數的乘積 一個判斷素數的函數,在主函數輸入一個整數,輸出是否為素數的信息 寫一個函數求n! ,利用該函數求1!2&…

功率半導體器件CV測試系統

概述 電容-電壓(C-V)測量廣泛用于測量半導體參數,尤其是MOS CAP和MOSFET結構。MOS(金屬-氧化物-半導體)結構的電容是外加電壓的函數,MOS電容隨外加電壓變化的曲線稱之為C-V曲線(簡稱C-V特性),C-V 曲線測試可以方便的確…

opencv-使用 Haar 分類器進行面部檢測

Haar 分類器是一種用于對象檢測的方法,最常見的應用之一是面部檢測。Haar 分類器基于Haar-like 特征,這些特征可以通過計算圖像中的積分圖來高效地計算。 在OpenCV中,Haar 分類器被廣泛用于面部檢測。以下是一個簡單的使用OpenCV進行面部檢測…

鴻蒙系統使用hdc_std.exe使用身份證讀卡器等外設USB獲得權限方法

hdc_std.exe是OpenHarmony 的命令行工具,由于使用的開源鴻蒙開發板上面沒有文件管理器,所以無法通過U盤等方式進行安裝.hap應用。 下面是使用hdc_std.exe安裝身份證讀卡器的步驟: 1、hdc_std.exe放桌面,然后WINR,打開…

CBTC 2023氫能展倒計時6天,最新同期會議活動Plus版發布

隨著時間的推移,CBTC2023深圳氫能技術展覽會即將拉開序幕。這場盛會將于11月30日在深圳福田會展中心盛大開幕,以“以儲賦能,智造未來”為主題,旨在搭建一個商務交流、供需合作、創新產品發布的平臺,讓氫能全產業鏈之間…

尋找質數 II

題目描述 輸入兩個整數 a,b,計算并輸出小于 a 的 b個質數,所有符合條件的質數里,輸出最大的 b 個質數,按照從大到小輸出,使用空格隔開。 假如符合條件的數量不夠,則輸出已經滿足的質數。 如果…

詳解Java中的異常體系機構(throw,throws,try catch,finally)

目錄 一.異常的概念 二.異常的體系結構 三.異常的處理 異常處理思路 LBYL:Look Before You Leap EAFP: Its Easier to Ask Forgiveness than Permission 異常拋出throw 異常的捕獲 提醒聲明throws try-catch捕獲處理 finally的作用 四.自定義異常類 一.異…

微信小程序:This Mini Program cannot be opened as your Weixin version is out-of-date.

項目場景: 問題描述 升級基礎庫3.2.0,然后PC端整個小程序都打不開了,點擊小程序提示”This Mini Program cannot be opened as your Weixin version is out-of-date. Update Weixin to the latest version.“,并且點擊Update Wei…

一個悄然崛起的國產軟件!!AI 又進化了!!

大家好,我是 Jack。 AI 寫代碼想必很多人都體驗過了,使用 AI 編程工具是一個大趨勢,越早學會使用 AI 輔助你寫代碼,你的效率也會越高。 甚至有些公司已經要求員工具備 AI 編程能力。 對于學生黨,AI 編程可以幫助我們…

MyBatisPlus總結

MyBatis-Plus時Mybatis的Best Partner MyBatis-Plus (opens new window)(簡稱 MP)是一個 MyBatis (opens new window)的增強工具,在 MyBatis 的基礎上只做增強不做改變,為簡化開發、提高效率而生。 特性 無侵入損耗小強大的 CR…

Android開發從0開始(廣播)

應用廣播 發送標準廣播的三步驟 發送標準廣播: //發送標準廣播 Intent intent new Intent("com.dongnaoedu.chapter09.standard"); sendBroadcast(intent); 定義廣播接受者: public class StanderdReceiver extends BroadcastReceiver { public s…

在ASP.NET Core 中使用 .NET Aspire 消息傳遞組件

前言 云原生應用程序通常需要可擴展的消息傳遞解決方案,以提供消息隊列、主題和訂閱等功能。.NET Aspire 組件簡化了連接到各種消息傳遞提供程序(例如 Azure 服務總線)的過程。在本教程中,小編將為大家介紹如何創建一個 ASP.NET …

PLC通過RS232轉PROFINET與電子分析天平秤通訊案例

本案例是通過用興達易控的XD-PNR200型RS232轉Profinet網關連接電子分析天平秤與PLC通訊的配置案例,用到設備為西門子S7-1200PLC,RS232轉Profinet網關,電子分析天平秤。 打開博圖,添加PLC;本案例使用的是1200PLC。 添加…

『接口測試干貨』| Newman+Postman接口自動化測試完整過程

『接口測試干貨』| NewmanPostman接口自動化測試完整過程 1 Newman簡介2 如何安裝Newman?2.1 安裝NodeJs2.2 安裝Newman2.2 解決Newman不是內部命令 3 Newman使用3.1 Newman如何運行集合?3.2 如何查看幫助文檔?3.3 環境變量設置3.4 關于全局變…

微信小程序制作

如果你也想搭建一個小程序,但不知道如何入手,那么今天我就教你如何使用第三方制作平臺,在短短三十分鐘內搭建一個小程序。 一、登錄小程序制作平臺 首先,登錄到小程序制作平臺的官方網站或應用程序,進入后臺管理系統。…

【Oracle OCP考試】1z0-082(4)

1.Which two statements are true about the PMON background process? A. It rolls back transactions when a process fails(當進程失敗時,它回滾事務) B. It registers database services with all local and remote listeners known to…

文章解讀與仿真程序復現思路——電網技術 EI\CSCD\北大核心《考慮5G基站儲能可調度容量的有源配電網協同優化調度方法》

這篇文章的標題涉及到以下關鍵概念: 5G基站: 提到了5G基站,這表明文章的焦點可能是與第五代移動通信技術相關的內容。5G技術對于提高通信速度、降低延遲以及支持大規模連接等方面有顯著的改進,因此對于基站的電力需求和供應可能存…

2023年ESG投資研究報告

第一章 ESG投資概況 1.1 定義 ESG投資,亦稱負責任投資,是一種融合環境(Environment)、社會(Social)和治理(Governance)考量的投資方法,旨在通過綜合這些因素來優化投資…

美國汽車零部件巨頭 AutoZone 遭遇網絡攻擊

Security Affairs 網站披露,美國汽車配件零售商巨頭 AutoZone 稱其成為了 Clop MOVEit 文件傳輸網絡攻擊的受害者,導致大量數據泄露。 AutoZone 是美國最大的汽車零配件售后市場經銷商之一,在美國、墨西哥、波多黎各、巴西和美屬維爾京群島經…

算法-技巧-簡單-只出現一次的數字、多數元素

記錄一下算法題的學習10 只出現一次的數字 leetcode題目:給你一個 非空 整數數組 nums ,除了某個元素只出現一次以外,其余每個元素均出現兩次。找出那個只出現了一次的元素。你必須設計并實現線性時間復雜度的算法來解決此問題,且…