timmy ревизий этого фрагмента 10 months ago. К ревизии
Без изменений
timmy ревизий этого фрагмента 10 months ago. К ревизии
Без изменений
timmy ревизий этого фрагмента 1 year ago. К ревизии
1 file changed, 73 insertions
factory_method_example.py(файл создан)
| @@ -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() | |