1. 程式人生 > >python中設計模式

python中設計模式

1.工廠方法模式(Factory Method Pattern):

定義了一個建立物件的介面,但由子類決定要例項化類的哪一個;即通過子類來建立物件。

工廠方法模式(Factory Method Pattern):

定義了一個建立物件的介面,但由子類決定要例項化類的哪一個;即通過子類來建立物件。

原則:

要依賴抽象,不要依賴具體類。

案例:

先解釋什麼是工廠:
如果你開一家Pizza店(PizzaStore抽象類)賣各種風味的Pizza(Pizza子類),那麼你需要根據客戶要求準備相應的Pizza(建立Pizza物件),然後烘烤、切片、包裝;
最簡單的做法就是在PizzaStore中根據客戶要求(型別判斷)建立相應的Pizza物件,然後呼叫Pizza自身(由Pizza抽象類實現)的烘烤、切片和包裝方法;
但這樣的程式碼缺乏彈性,因為你讓一個抽象類去依賴具體的物件;我們可以建立一個工廠來生產Pizza,根據傳入的不同型別值返回不同Pizza物件,即從PizzaStore中將建立物件的程式碼挪到工廠中。但這只是一個程式設計技巧,並不算模式。

在工廠方法模式中,我們在PizzaStore中定義一個抽象介面(create_pizza)作為抽象的工廠,而order_pizza是它的客戶;將Pizza物件的建立放到PizzaStore子類去解決。

現有Cheese和Clam兩款Pizza,以及NY和Chicago兩家分店,每家店的同款Pizza的口味不同——為迎合當地口味做了改進,主要差別來自不同的原材料,因此我們實現四個Pizza型別(NYStyleCheesePizza、NYStyleClamPizza、ChicagoStyleCheesePizza和ChicagoStyleClamPizza),每種使用不同的原材料組合,根據客戶所在城市和選擇款式我們建立不同的物件;根據工廠方法,我們將物件建立的程式碼放到PizzaStore子類去實現。

適用性:

當一個類不知道它所必須建立的物件的類的時候。

當一個類希望由它的子類來指定它所建立的物件的時候。

當類將建立物件的職責委託給多個幫助子類中的某一個,並且你希望將哪一個幫助子類是代理者這一資訊區域性化的時候。

實現:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 #!/usr/bin/python #coding:utf8 ''' Factory Method ''' class ChinaGetter: """A simple localizer a la gettext""" def __init__(self): self.trans = dict(dog=u"小狗", cat=u"小貓") def get(self, msgid): """We'll punt if we don't have a translation""" try: return self.trans[msgid] except KeyError: return str(msgid) class EnglishGetter: """Simply echoes the msg ids""" def get(self, msgid): return str(msgid) def get_localizer(language="English"): """The factory method""" languages = dict(English=EnglishGetter, China=ChinaGetter) return languages[language]() # Create our localizers e, g = get_localizer("English"), get_localizer("China") # Localize some text for msgid in "dog parrot cat bear".split(): print(e.get(msgid), g.get(msgid))

2. Singleton(單例)

意圖:

保證一個類僅有一個例項,並提供一個訪問它的全域性訪問點。

適用性:

當類只能有一個例項而且客戶可以從一個眾所周知的訪問點訪問它時。

當這個唯一例項應該是通過子類化可擴充套件的,並且客戶應該無需更改程式碼就能使用一個擴充套件的例項時。

實現:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 #!/usr/bin/python #coding:utf8

相關推薦

python設計模式

1.工廠方法模式(Factory Method Pattern): 定義了一個建立物件的介面,但由子類決定要例項化類的哪一個;即通過子類來建立物件。 工廠方法模式(Factory Method Pattern): 定義了一個建立物件的介面,但由子類決定要例項

Python Selenium設計模式-POM

page apt 按鈕 而已 run waiting 什麽 sep repo 前言 本文就python selenium自動化測試實踐中所需要的POM設計模式進行分享,以便大家在實踐中對POM的特點、應用場景和核心思想有一定的理解和掌握。 為什麽要用POM 基於python

java23設計模式之適配器模式

print 鍵盤 分享 rri sys 完成 out img closed package com.bjsxt.adapter; /** * 被適配的類 * (相當於例子中的,PS/2鍵盤) * @author Administrator * */

Java 23設計模式

叠代 職責鏈模式 方法 備忘錄模式 創建型 抽象工廠 適配器 狀態模式 橋接模式 創建型模式(5):   --單例模式、工廠模式、抽象工廠模式、建造者模式、原型模式。 結構型模式(7):   --適配器模式、橋接模式、裝飾模式、組合模式、外觀模式、享元模式、代理模式。 行為

java23設計模式之叠代器模式

asn spl gre ring ext concrete sta get face package com.bdqn.iterator; public interface MyIterator { //將遊標指向第一個元素 void first()

java23設計模式之策略模式

log author 批量 isp contex view strategy ext 不同 package com.bjsxt.strategy; /** * 負責和具體的策略類交互 * 這樣的話,具體的算法和直接的客戶端調用分離了,使得算法可以獨立於客戶端獨立

java23設計模式之代理模式

唱歌 [] lap pen 技術分享 contract rac display images staticproxy ---靜態代理 package com.bjsxt.proxy.staticProxy; public interface Star

23設計模式包括哪些

單例模式 自動更新 %20 att 技術 讓其 emp 直接 獲得 傳送門(轉載):https://www.cnblogs.com/Leo_wl/p/6067267.html 附(github設計模式):https://github.com/iluwatar/java-d

java23設計模式之觀察者模式

什麼叫觀察者模式? 當被觀察者的資料更新時,將會通知觀察該主題的所有觀察者。就像---微信公眾號就是被觀察者---關注該公眾號的就是觀察者---》 當公眾號更新文章時,關注的人就會獲得該資訊。這就是觀察者模式的應用。 用圖說明: 下面將用程式碼來解釋上面的內容: 1.觀

php的23設計模式

原文地址 https://my.oschina.net/botkenni/blog/1603660   PhpDesignPatterns 【PHP 中的設計模式】 一、 Introduction【介紹】 設計模式:提供了一種廣泛的可重用的方式來解決我們日常

NO3-java設計模式之建造者模式

說明 參考文獻:http://www.runoob.com/design-pattern/builder-pattern.html 上邊的這個菜鳥教程是真的不錯,我也是借花獻佛,只是自己寫了一哈,加上自己的理解和程式碼註釋來分享一下心得吧!免得以後忘了。 建造者模式的理解 建造者模式

軟體架構設計模式——23設計模式

建立型模式 1、FACTORY—追MM少不了請吃飯了,麥當勞的雞翅和肯德基的雞翅都是MM愛吃的東西,雖然口味有所不同,但不管你帶MM去麥當勞或肯德基,只管向服務員說“來四個雞翅”就行了。麥當勞和肯德基就是生產雞翅的Factory。 工廠模式:客戶類和工廠類分開。消費者任何時候需要某種產品

23設計模式概括及六種設計原則(一)

一、設計模式分類 總體來說模式依據目的可分為建立型模式(Creational)、結構型模式(Structural)、行為型模式(Behavioral)三種。 建立型模式:處理物件的建立。共5種:工廠方法模式(Factory Method)、抽象工廠模式(Abstract Factory)、建造者模式(Bu

Python基礎設計模式 觀察者模式、營銷模式

#觀察者模式 class Recetion(): def init(self): #status 動作 狀態 self.oberserList=[] #oberser觀察者 self.status=" " def attach(self,obj): self.oberserList.appe

Tomcat設計模式-觀察者模式

開篇  觀察者模式的定義,有多個物件在關注著一個物件,如果這個物件的狀態發生了改變,其它依賴(關注)它的物件就會收到通知,然後在接收到通知以後各個物件做出相應的動作。  觀察者模式涉及到兩個概念(觀察者和被觀察者),被觀察者只能有一個,而觀察這個觀察者的物件可以用多個。【一對多】定義物件間的

Java設計模式(八):建造者模式

介紹 今天我們將研究java中的Builder模式。Builder 設計模式是一種創造性的設計模式,如工廠模式和抽象工廠模式。 當Object包含許多屬性時,引入了Builder模式來解決Factory和Abstract Factory設計模式的一些問題。 當Object包含許多屬性時,Factory和Abs

23設計模式在遊戲伺服器裡面例子

遊戲裡面有很多資料有用XML 形式配置,有用資料庫生成。 建立型(6)    1.簡單工廠模式 由一個工廠物件決定創建出哪一種產品類的例項。 比如在遊戲活動設計的時候:每個活動配置資料的生成 public abstract class AbsLimitActiv

python大話設計模式

上一週把《大話設計模式》看完了,對面向物件技術有了新的理解,對於一個在C下寫程式碼比較多、偶爾會用到一些指令碼語言寫指令碼的人來說,很是開闊眼界。《大話設計模式》的程式碼使用C#寫成的,而在本人接觸到的面嚮物件語言中,只對C++和Python還算了解,為了加深對各個模

23設計模式之抽象工廠模式

抽象工廠模式的定義 定義: 為建立一組相關或互相依賴的物件提供一個介面,而且無須制定它們的具體類 抽象工廠模式的實現 兩個產品族, 其類圖如下:   抽象產品類程式碼如下:   產品A的1級和2級類程式碼如下:   產品

23設計模式之_原型模式(深/淺拷貝)

前言 原型模式其實java Object中已經提供了一個Clone( )方法,平時很少用到,最近讀Retrofit原始碼時候看到有這種使用方式。 定義 原型模式就是在系統clone()標記的基礎上,對Clone()進行復寫,不同的操作可以產生兩種拷貝模式。 UM