用代码体现依赖注入的好处
时间: 2024-04-12 15:27:11 浏览: 14
以下是一个简单的示例,展示了依赖注入的好处:
假设我们有一个 Logger 接口和两个不同的 Logger 实现:ConsoleLogger 和 FileLogger。我们的应用程序中有一个 Service 类需要使用 Logger 来记录信息。
```python
# Logger 接口
class Logger:
def log(self, message):
pass
# ConsoleLogger 实现
class ConsoleLogger(Logger):
def log(self, message):
print("Console Logger: " + message)
# FileLogger 实现
class FileLogger(Logger):
def log(self, message):
with open("log.txt", "a") as file:
file.write("File Logger: " + message + "\n")
# Service 类依赖于 Logger
class Service:
def __init__(self, logger):
self.logger = logger
def do_something(self):
self.logger.log("Doing something...")
# 使用依赖注入创建 Service 实例并使用不同的 Logger
console_logger = ConsoleLogger()
service1 = Service(console_logger)
service1.do_something()
file_logger = FileLogger()
service2 = Service(file_logger)
service2.do_something()
```
在上面的示例中,我们通过依赖注入将不同的 Logger 实例传递给 Service 类的构造函数。这样,Service 类不需要关心具体使用哪个 Logger 实现,只需要知道它可以使用 log 方法来记录信息。
通过使用依赖注入,我们可以轻松地替换 Logger 实现,例如从控制台日志切换到文件日志,而不需要修改 Service 类的代码。这样,我们实现了代码的解耦和灵活性,使得系统更容易扩展和维护。
相关推荐
![application/x-zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)