database_interface.py
· 942 B · Python
Brut
from abc import ABC, abstractmethod
# 定義一個資料庫介面,規定大家都要有 connect 方法
class IDatabase(ABC):
@abstractmethod
def connect(self):
pass
# 具體實作 MySQL 版資料庫
class MySQLDatabase(IDatabase):
def connect(self):
print("連線到 MySQL 資料庫!")
# 服務類別,同樣透過建構子注入依賴,這次接收的是介面型別
class UserService:
def __init__(self, database: IDatabase):
self.database = database # 不管你是 MySQL、PostgreSQL,都行
def login(self, username: str):
self.database.connect() # 登入時動態呼叫 connect
print(f"使用者 {username} 登入成功!")
def main():
db = MySQLDatabase() # 換成任何符合 IDatabase 的實作都可以
user_service = UserService(db) # 注入進去
user_service.login("timmy") # 呼叫登入
if __name__ == "__main__":
main()
| 1 | from abc import ABC, abstractmethod |
| 2 | |
| 3 | # 定義一個資料庫介面,規定大家都要有 connect 方法 |
| 4 | class IDatabase(ABC): |
| 5 | @abstractmethod |
| 6 | def connect(self): |
| 7 | pass |
| 8 | |
| 9 | # 具體實作 MySQL 版資料庫 |
| 10 | class MySQLDatabase(IDatabase): |
| 11 | def connect(self): |
| 12 | print("連線到 MySQL 資料庫!") |
| 13 | |
| 14 | # 服務類別,同樣透過建構子注入依賴,這次接收的是介面型別 |
| 15 | class UserService: |
| 16 | def __init__(self, database: IDatabase): |
| 17 | self.database = database # 不管你是 MySQL、PostgreSQL,都行 |
| 18 | |
| 19 | def login(self, username: str): |
| 20 | self.database.connect() # 登入時動態呼叫 connect |
| 21 | print(f"使用者 {username} 登入成功!") |
| 22 | |
| 23 | def main(): |
| 24 | db = MySQLDatabase() # 換成任何符合 IDatabase 的實作都可以 |
| 25 | user_service = UserService(db) # 注入進去 |
| 26 | user_service.login("timmy") # 呼叫登入 |
| 27 | |
| 28 | if __name__ == "__main__": |
| 29 | main() |
| 30 | |
| 31 |