程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

設計模式工廠模式(Factory Method)— Python

編輯:Python

工廠方法是設計模式中,創建設計模式的一種設計方式。

它允許接口或類創建對象,但讓子類決定要實例化哪個類或對象。

工廠方法提供了一種更好的方式,創建對象(不需要更改客戶端的代碼邏輯)。

看一個語言翻譯模型創建類的例子。

看一下不使用工廠模式的代碼:

class FrenchLocalizer:
""" 將信息翻譯為法語版本"""
def __init__(self):
self.translations = {
"car": "voiture", "bike": "bicyclette",}
def localize(self, msg):
"""change the message using translations"""
return self.translations.get(msg, msg)
class SpanishLocalizer:
"""將信息翻譯為西班牙語版本"""
def __init__(self):
self.translations = {
"car": "coche", "bike": "bicicleta",}
def localize(self, msg):
"""翻譯對應信息"""
return self.translations.get(msg, msg)
if __name__ == "__main__":
# 創建類實例
f = FrenchLocalizer()
s = SpanishLocalizer()
# 輸入信息
message = ["car", "bike"]
#輸出信息
for msg in message:
print(f.localize(msg))
print(s.localize(msg))

使用工廠模式的代碼:

class FrenchLocalizer:
""" 將信息翻譯為法語版本"""
def __init__(self):
self.translations = {
"car": "voiture", "bike": "bicyclette",}
def localize(self, msg):
"""翻譯對應信息"""
return self.translations.get(msg, msg)
class SpanishLocalizer:
""" 將信息翻譯為西班牙語版本"""
def __init__(self):
self.translations = {
"car": "coche", "bike": "bicicleta",}
def localize(self, msg):
"""翻譯對應信息"""
return self.translations.get(msg, msg)
#創建工廠模式
def Factory(language ="French"):
"""Factory Method"""
localizers = {

"French": FrenchLocalizer,
"Spanish": SpanishLocalizer,
}
return localizers[language]()
if __name__ == "__main__":
f = Factory("French")
s = Factory("Spanish")
message = ["car", "bike"]
for msg in message:
print(f.localize(msg))
print(s.localize(msg))

如果想要添加更多的語言版本模塊,只需要添加對應的類。

然後在工廠模式中添加對應類的字典索引,即可完成,這個過程不需要改變客戶端的代碼。

優點:

  • 我們可以輕松添加新類型的產品,而不會干擾現有的客戶端代碼。
  • 避免產品與創建者類和對象之間的緊密耦合。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved