timmy hat die Gist bearbeitet 10 months ago. Zu Änderung gehen
Keine Änderungen
timmy hat die Gist bearbeitet 10 months ago. Zu Änderung gehen
Keine Änderungen
timmy hat die Gist bearbeitet 1 year ago. Zu Änderung gehen
1 file changed, 73 insertions
factory_method_example.py(Datei erstellt)
| @@ -0,0 +1,73 @@ | |||
| 1 | + | #!/usr/bin/env python | |
| 2 | + | # -*- coding: utf-8 -*- | |
| 3 | + | ||
| 4 | + | ||
| 5 | + | """ | |
| 6 | + | factory.py: 工廠方法模式的範例程式 | |
| 7 | + | ||
| 8 | + | Author: Timmy | |
| 9 | + | Copyright: Copyright 2022, Timmy | |
| 10 | + | 授權方式: MIT | |
| 11 | + | 版本: 1.0 | |
| 12 | + | """ | |
| 13 | + | ||
| 14 | + | ||
| 15 | + | class GreekLocalizer: | |
| 16 | + | def __init__(self): # 建構子,在建立物件時會自動執行 | |
| 17 | + | self.translations = {"dog": "σκύλος", "cat": "γάτα"} # 定義字典 translations | |
| 18 | + | ||
| 19 | + | def localize(self, msg): # 定義 localize 方法 | |
| 20 | + | return self.translations.get(msg, msg) # 傳回 translations 字典的對應轉換,若無則傳回原本的 msg | |
| 21 | + | ||
| 22 | + | ||
| 23 | + | class GreekLocalizer: | |
| 24 | + | def __init__(self): # 建構子,在建立物件時會自動執行 | |
| 25 | + | self.translations = {"dog": "σκύλος", "cat": "γάτα"} # 定義字典 translations | |
| 26 | + | ||
| 27 | + | def localize(self, msg): # 定義 localize 方法 | |
| 28 | + | return self.translations.get(msg, msg) # 傳回 translations 字典的對應轉換,若無則傳回原本的 msg | |
| 29 | + | ||
| 30 | + | ||
| 31 | + | class EnglishLocalizer: # 定義 EnglishLocalizer 類別 | |
| 32 | + | def localize(self, msg): # 定義 localize 方法 | |
| 33 | + | return msg # 傳回原本的 msg,即不進行轉換 | |
| 34 | + | ||
| 35 | + | ||
| 36 | + | class ChineseLocalizer: | |
| 37 | + | def __init__(self): # 建構子,在建立物件時會自動執行 | |
| 38 | + | self.translations = {"dog": "狗", "cat": "貓"} # 定義字典 translations | |
| 39 | + | ||
| 40 | + | def localize(self, msg): # 定義 localize 方法 | |
| 41 | + | return self.translations.get(msg, msg) # 傳回 translations 字典的對應轉換,若無則傳回原本的 msg | |
| 42 | + | ||
| 43 | + | ||
| 44 | + | def get_localizer(language="English"): # 定義 get_localizer 函式 | |
| 45 | + | """Factory""" | |
| 46 | + | ||
| 47 | + | # 定義字典 localizers | |
| 48 | + | localizers = { | |
| 49 | + | "English": EnglishLocalizer, # 英文的 Localizer | |
| 50 | + | "Greek": GreekLocalizer, # 希臘文的 Localizer | |
| 51 | + | "Chinese": ChineseLocalizer, # 中文的 Localizer | |
| 52 | + | } | |
| 53 | + | ||
| 54 | + | # 傳回對應語言的 Localizer 物件 | |
| 55 | + | return localizers[language]() | |
| 56 | + | ||
| 57 | + | ||
| 58 | + | def main(): | |
| 59 | + | ||
| 60 | + | e, g, ch = ( | |
| 61 | + | get_localizer(language="English"), | |
| 62 | + | get_localizer(language="Greek"), | |
| 63 | + | get_localizer(language="Chinese"), | |
| 64 | + | ) | |
| 65 | + | ||
| 66 | + | # 將字串 "dog parrot cat bear" 依照空白斷開,並按順序逐一取出 | |
| 67 | + | for msg in "dog parrot cat bear".split(): | |
| 68 | + | # 印出英文、希臘文、中文的 Localizer 對於該字串 | |
| 69 | + | print(e.localize(msg), g.localize(msg), ch.localize(msg)) | |
| 70 | + | ||
| 71 | + | ||
| 72 | + | if __name__ == "__main__": | |
| 73 | + | main() | |