11/21/2020 Python Taiwan (Telegram 讀書會)
王銘德
class 脊椎動物(): def 有脊椎(self): return True def 叫聲(self): print("~~ ~~") class 貓(脊椎動物): def 叫聲(self): print("喵... 喵...") class 狗(脊椎動物): def 叫聲(self): print("旺... 旺...")
小黃 = 狗() 小黃.叫聲() # 旺... 旺...
print(小黃.有脊椎()) #True
阿花 = 貓()
阿花.叫聲() # 喵... 喵...
print(阿花.有脊椎()) #True
(跟 interface (介面) 類似, 只定義 抽象 methods)
from abc import ABC, abstractmethod
class 電話(ABC):
@abstractmethod
def 顯示(self):
pass
class 三星(電話):
def 顯示(self):
print("這是一支三星手機")
抽象 method, 一定要在 subclass 定義
討論其可能的 "生成方法", 架構, 或是 "其行為模式 (功能)"
其目的, 讓你的程式 物件之間 的耦合度 盡量 降低.
方法: 盡量不要直接用 new (Python 產生物件)
盡量用 interface (Python 用 abc)
盡量用 dependency injection (DI)
(把相關物件用參數帶入, 不要在肚子裡生成物件)
Simple Factory (簡易工廠模式)
Singleton (單例模式)
State (狀態模式)
Prototype (雛形模式)
Iterator (迭代器模式)
Flyweight (輕盈模式) <-- new
Mediator (仲裁人模式)
MVC Pattern (Django?, Flask?)
Template (模板模式)
FactoryMethod (工廠方法模式)
Builder (建造者模式)
Composite (合成模式)
Object Pool (物件池模式)
Decorator (裝飾模式) <-- new
* 以上皆連結到 repl.it (fork 成你自己的程式, 來練習)
* 一句老話, ”你沒有自己練習, 無法體會出其中的奧妙和好處“