-
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathDependencyInjection.cpp
More file actions
103 lines (86 loc) · 3.76 KB
/
DependencyInjection.cpp
File metadata and controls
103 lines (86 loc) · 3.76 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
#include <iostream>
using namespace std;
// Interface for Logger
__interface ILogger
{
void Log(const string& message);
};
// ConsoleLogger implementation of ILogger interface
class ConsoleLogger : public ILogger
{
public:
void Log(const string& message) override
{
cout << "[ConsoleLogger:] " << message << "\n";
}
};
// FileLogger implementation of ILogger interface
class FileLogger : public ILogger
{
public:
void Log(const string& message) override
{
// Write the message to a file
// ...
cout << "[FileLogger:] " << message << "\n";
}
};
// DatabaseLogger implementation of ILogger interface
class DatabaseLogger : public ILogger
{
public:
void Log(const string& message) override
{
// Write the message to a database
// ...
cout << "[DatabaseLogger:] " << message << "\n";
}
};
// Interface for User class
class Application
{
private:
ILogger* logger;
public:
Application(ILogger* logger) : logger(logger) {}
void DoSomething()
{
logger->Log("Logger usage demo");
}
};
int main()
{
// Create the logger
DatabaseLogger logger;
// Create the user with the logger dependency
Application app(&logger);
// Call the SayHello method on the user
app.DoSomething();
}
/*
Этот код демонстрирует реализацию паттерна Dependency Injection
с помощью интерфейса ILogger, а также реализации ILogger для трех разных типов
логгирования: ConsoleLogger, FileLogger и DatabaseLogger.
В функции main() создается экземпляр DatabaseLogger, и затем
создается экземпляр Application, который использует этот логгер
в качестве зависимости. Вызов метода DoSomething() на app в конечном итоге
вызывает метод Log() на экземпляре DatabaseLogger.
Обратите внимание, что зависимость от ILogger передается экземпляру Application
через конструктор. Это означает, что если мы захотим изменить логгер в будущем,
мы можем создать экземпляр другого типа логгера и передать его
в качестве зависимости при создании экземпляра Application. Это делает наш код
более гибким и удобным для поддержки в будущем.
Кроме того, здесь используется указатель ILogger* в качестве типа зависимости.
Это означает, что мы можем передавать как экземпляры объектов, так и указатели
на них. Здесь используется указатель на DatabaseLogger, но мы могли бы
использовать также и указатель на ConsoleLogger или FileLogger, если бы
это было необходимо.
*/
// https://en.wikipedia.org/wiki/Dependency_injection
// https://xufocoder.medium.com/a-quick-intro-to-dependency-injection-what-it-is-and-when-to-use-it-de1367295ba8
/*
В разработке программного обеспечения, внедрение зависимостей это такая техника,
где посредством одного объекта (или статического метода) предоставляются
зависимости другого объекта. Зависимость — это объект, который может быть
использован (как сервис).
*/