原创 Python與設計模式--狀態模式

一、電梯控制器 電梯在我們周邊隨處可見,電梯的控制邏輯中心是由電梯控制器實現的。電梯的控制邏輯,即使簡單點設計,把狀態分成開門狀態,停止狀態和運行狀態,操作分成開門、關門、運行、停止,那流程也是很複雜的。首先,開門狀態不能開門、運行、停止

原创 Python與設計模式--組合模式

一、公司結構組織 每一個公司都有自己的組織結構,越是大型的企業,其組織結構就會越複雜。大多數情況下,公司喜歡用“樹形”結構來組織複雜的公司人事關係和公司間的結構關係。一般情況下,根結點代表公司的最高行政權利單位,分支節點表示一個個部門,而

原创 Python與設計模式--訪問者模式

  一、藥房業務系統 假設一個藥房,有一些大夫,一個藥品劃價員和一個藥房管理員,它們通過一個藥房管理系統組織工作流程。大夫開出藥方後,藥品劃價員確定藥品是否正常,價格是否正確;通過後藥房管理員進行開藥處理。該系統可以如何實現?最簡單的想法

原创 Python與設計模式--觀察者模式

一、火警報警器 在門面模式中,我們提到過火警報警器。在當時,我們關注的是通過封裝減少代碼重複。而今天,我們將從業務流程的實現角度,來再次實現該火警報警器。 class AlarmSensor: def run(self):

原创 Python與設計模式--建造者模式

一、快餐點餐系統 今天的例子,還是上一次談到的快餐點餐系統。只不過,今天我們從訂單的角度來構造這個系統。 最先還是有請上次的主角們:主餐: class Burger(): name="" price=0.0 de

原创 Python與設計模式--裝飾器模式

一、快餐點餐系統 又提到了那個快餐點餐系統,不過今天我們只以其中的一個類作爲主角:飲料類。首先,回憶下飲料類: class Beverage(): name = "" price = 0.0 type = "BE

原创 Python與設計模式--策略模式

一、客戶消息通知 假設某司維護着一些客戶資料,需要在該司有新產品上市或者舉行新活動時通知客戶。現通知客戶的方式有兩種:短信通知、郵件通知。應如何設計該系統的客戶通知部分?爲解決該問題,我們先構造客戶類,包括客戶常用的聯繫方式和基本信息,同

原创 Python與設計模式--享元模式

一、網上咖啡選購平臺 假設有一個網上咖啡選購平臺,客戶可以在該平臺上下訂單訂購咖啡,平臺會根據用戶位置進行線下配送。假設其咖啡對象構造如下: class Coffee: name = '' price =0 de

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

一、火警報警器(1) 假設有一組火警報警系統,由三個子元件構成:一個警報器,一個噴水器,一個自動撥打電話的裝置。其抽象如下: class AlarmSensor: def run(self): print "Al

原创 Python與設計模式--適配器模式

一、外包人員系統兼容 假設某公司A與某公司B需要合作,公司A需要訪問公司B的人員信息,但公司A與公司B協議接口不同,該如何處理?先將公司A和公司B針對各自的人員信息訪問系統封裝了對象接口。 class ACpnStaff: na

原创 Python與設計模式--原型模式

一、圖層 大家如果用過類似於Photoshop的平面設計軟件,一定都知道圖層的概念。圖層概念的提出,使得設計、圖形修改等操作更加便利。設計師既可以修改和繪製當前圖像對象,又可以保留其它圖像對象,邏輯清晰,且可以及時得到反饋。本節內容,將以

原创 Python與設計模式--模板模式

一、股票查詢客戶端 投資股票是種常見的理財方式,我國股民越來越多,實時查詢股票的需求也越來越大。今天,我們通過一個簡單的股票查詢客戶端來認識一種簡單的設計模式:模板模式。 根據股票代碼來查詢股價分爲如下幾個步驟:登錄、設置股票代碼、查詢、

原创 Python與設計模式--代理模式

一、網絡服務器配置白名單 代理模式是一種使用頻率非常高的模式,在多個著名的開源軟件和當前多個著名的互聯網產品後臺程序中都有所應用。下面我們用一個抽象化的簡單例子,來說明代理模式。 首先,構造一個網絡服務器: #該服務器接受如下格式數據,

原创 Python與設計模式--備忘錄模式

一、遊戲進度保存 打過遊戲的朋友一定知道,大多數遊戲都有保存進度的功能,如果一局遊戲下來,忘保存了進度,那麼下次只能從上次進度點開始重新打了。一般情況下,保存進度是要存在可持久化存儲器上,本例中先以保存在內存中來模擬實現該場景的情形。 以

原创 Python與設計模式--解釋器模式

一、模擬吉他 要開發一個自動識別譜子的吉他模擬器,達到錄入譜即可按照譜發聲的效果。除了發聲設備外(假設已完成),最重要的就是讀譜和譯譜能力了。分析其需求,整個過程大致上分可以分爲兩部分:根據規則翻譯譜的內容;根據翻譯的內容演奏。我們用一個