python設計模式
⑴ python設計模式 - 代理模式
"""
代理模式(Proxy):為某個對象提供一種代理以控制對這個對象的訪問。
注意:代理模式和策略模式的類圖很相近,實現方法也是一樣的,但是應用場景很不一樣,體現了不同的思想。
策略模式中同一外部對象訪問上下文對象的操作一樣,但是裡面的策略對象不同。
代理模式中不同的外部對象訪問代理對象的操作一樣,但是裡面的真實對象是一樣的。
代理模式在訪問對象時引入一定程度的間接性,因為這種間接性,可以附加多種用途。
應用場景:
1、遠程代理。為一個對象在不同的地址空間提供局部代表。這樣可以隱藏一個對象存在於不同地址空間的事實。
2、虛擬代理。當要創建耗時很長的對象時,可以使用虛擬代理。虛擬代理完成的工作為新建真實對象,並在新建的過程中給出提示。比如在網頁載入圖片的過程中,虛擬代理可以用一個圖片框暫時替代真實的圖片。
3、安全代理。用於控制真實對象訪問是的許可權。
4、智能指引。當調用真實的對象時,代理處理另外一些事情,比如計算真實對象的引用次數、是否鎖定等等。
"""
import time
class SalesManager:
def talk(self):
print("銷售經理准備談")
class Proxy:
def __init__(self):
self.busy = 'No'
self.sales = None
def talk(self):
print("代理檢查銷售經理的可訪問性")
if self.busy == 'No':
self.sales = SalesManager()
time.sleep(0.1)
self.sales.talk()
else:
time.sleep(0.1)
print("銷售經理正忙")
class NoTalkProxy(Proxy):
def talk(self):
print("代理檢查銷售經理的可訪問性")
time.sleep(0.1)
print("該銷售經理也不會跟你說話不論他/她是否正忙")
if __name__ == '__main__':
p = Proxy()
p.talk()
p.busy = 'Yes'
p.talk()
p = NoTalkProxy()
p.talk()
p.busy = 'Yes'
p.talk()
⑵ Python的程序結構是如何體現的
在Python中,程序的結構反映在代碼的組織和編寫方式上。
Python 程序由一系列語句組成,這些語句虧褲按順序執行。這些語句可以包括賦值、函數調用、控制語句(如 if 語句和 for 循環)和其他構造。
縮進用於指示代碼的結構。例如,只有在滿足特定條判空祥件時才掘搏執行的代碼塊將在 if 語句下縮進。這有助於使代碼更具可讀性和更易於理解。
除了 Python 程序的基本結構之外,還可以遵循各種設計模式和最佳實踐,以使代碼更易於維護和高效。其中包括使用函數將代碼組織到邏輯單元中、使用類定義可重用對象以及使用模塊將代碼組織到單獨的文件中。
總體而言,Python 程序的結構反映了代碼的組織和編寫方式,並遵循可維護性和效率的最佳實踐。
⑶ Python有設計模式么
單例模式:Python 的單例模式最好不要藉助類(在 Java 中藉助類是因為 Java 所有代碼都要寫在類中),而是通過一個模塊來實現。一個模塊的模塊內全局變數、模塊內全局函數,組合起來就是一個單例對象了。
模板方法模式:這個可以像其他語言一樣實現,但是如果要遵循鴨子類型原則的話,應該刪除公有的抽象父類(或介面),從而追求靈活性。
工廠方法模式、多例模式:這個也不用藉助類,直接寫一個全局函數作為工廠函數即可。因為 Python 中實例化是通過 call 類來完成的,現在改成 call 工廠函數,對客戶摳碼者是透明的。(從這點我表示理解 Python 沒有 new 操作符的好處了,使用通用的 call 定義,正交性極強)
裝飾器模式、代理模式:這個接觸過 Python 就不會不知道了,Python 內置的 decorator 語法如此著名。裝飾器模式和代理模式都可以通過這種方式完成。另外一種是對對象的裝飾或代理,這個也不需要按照契約編程的風格,讓代理對象實現被代理對象的抽象。一切動態代理,只需要通過重載屬性訪問操作符,神馬都簡單了(和 PHP 通過 __get、__set、__call 來實現動態代理很類似)。
原型模式:這個在 Python 中實現的不是那麼爽快,需要調用 來克隆原型對象。但是其實有另一種實現方式:之所以使用原型模式,是因為對象初始化需要較大開銷。我們只需要保存初始化的結果,並在產生新對象的時候賦予新對象即可。所以,通過元類控制對象被創建的過程,來實現原型模式,也是一種選擇。
⑷ Python設計模式:工廠方法模式
工廠,大家一般能想到的是生產產品的地方, 在設計模式中,工廠可分為:簡單工廠模式、工廠方法模式。 在前期推文 Python 簡單工廠模式 中有關於簡單工廠模式的解讀。
根據工廠的抽象程度可分為:工廠方法模式、抽象工廠模式。 該模式用於封裝和管理對象的創建,是一種創建型模式。
在簡單工廠模式中,只提供了一個工廠類,該工廠類處於對產品類進行實例化的中心位置,它知道每一個產品對象的創建細節,並決定何時實例化哪一個產品類。
簡單工廠模式最大的缺點是:當有新產品要加入到系統中時,必須修改工廠類,加入必要的處理邏輯,這違背了「開閉原則」。
在簡單工廠模式中,所有的產品都是由同一個工廠創建,工廠類職責較重,業務邏輯較為復雜,具體產品與工廠類之間的耦合度高,嚴重影響了系統的靈活性和擴展性,而工廠方法模式則可以很好地解決這一問題。因此工廠方法模式應運而生。
(1)、工廠方法模式定義一個用於創建對象的介面,但是工廠本身並不負責創建對象,而是讓子類決定將哪一個類實例化。工廠方法模式讓一個類的實例化延遲到其子類。 工廠方法的創建是通過繼承而不是通過實例化來完成的。
(2)、工廠方法模式就是簡單工廠模式的進一步抽象。由於面向對象多態性,工廠方法模式保持了簡單工廠的優點同時克服了它的缺點。工廠方法模式中,核心的工廠被提升為一個抽象類,將具體的創建工作交給他的子類完成。
這個抽象的工廠類僅規定具體工廠實現的介面,而不明確指出如何實例化一個產品類,這使得工廠方法模式允許系統在不修改原有產品結構的情況下輕松的引進新產品。
工廠方法使設計更加具有可定製性,它可以返回相同的實例或子類,而不是某種類型的對象。
前期分享的 Python 簡單工廠模式 和今天分享的Python 工廠方法模式,大家在實際應用時能解決問題滿足需求即可,可靈活變通,自由選擇,無所謂哪種設計模式更高級。
同時無論哪種設計模式,由於可能封裝了大量對象和工廠創建,當有新加入產品的需求時,需要修改已定義好的工廠相關的類,因此對於產品和工廠的擴展性不太友好,在選擇使用時利弊需要權衡一下。
⑸ python如何學習入門
怎麼學python入門?讓我們一起了解一下吧!
1、選擇一本適合入門的書籍,全面了解python語言。
2、通過閱讀書籍或者觀看視頻等方式,學習python基礎語法,包括面向對象編程與程序設計模式的理解、python數據分析基礎、python網路編程、python並發與高效編程等內容。通過前期python學習來了解和掌握常量變數的使用,運算符的使用、流程式控制制的使用等,最後掌握python編程語言的基礎內容。
拓展:什麼是Python
Python是一種跨平台的計算機程序設計語言,是ABC語言的替代品。Python能提供高效的高級數據結構,還能簡單有效地面向對象編程,是一種面向對象的動態類型語言,最初被設計用於編寫自動化腳本,隨著版本的不斷更新和語言新功能的添加,越來越多被用於獨立的、大型項目的開發。
今天的分享就是這些,希望能幫助到大家!