依赖倒置
Coddy Clean Code:用 Python 写出更好的代码 课程的第 26 课,共 28 课。
“依赖抽象,[而不是]具体实现。”
来看一个违反这一原则的例子:
class LocalStorage:
def save(self, key, value):
print("Saved, " + key + ":" + value)LocalStorage 类保存键值对。
现在,我们有另一个使用 LocalStorage 的主类:
class App:
def start(self, key, value):
storage = LocalStorage()
storage.save(key, value)LocalStorage 是一种具体实现,而 App 依赖于它!
更好的做法是创建一个接口(抽象类):
from abc import ABC, abstractmethod
class Storage(ABC):
@abstractmethod
def save(self):
pass然后使用该接口的实例,而不是具体实现。
挑战
简单给出的代码几乎已经完成,请添加抽象类 Storage。
请注意,完成实现后,很容易切换到其他具体类,例如 CloudStorage……
亲手试试
from abc import ABC, abstractmethod
# your code here
class LocalStorage(Storage):
def save(self, key, value):
print("Saved, " + key + ":" + value)
class App:
def __init__(self, storage):
self.storage = storage
def start(self, key, value):
storage.save(key, value)
if __name__ == "__main__":
storage = LocalStorage()
app = App(storage)
key = input()
value = input()
app.start(key, value)
Clean Code:用 Python 写出更好的代码中的所有课
自己练习: Python 在线编译器