-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathinterface.cpp
More file actions
89 lines (68 loc) · 1.63 KB
/
interface.cpp
File metadata and controls
89 lines (68 loc) · 1.63 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
/**
* interface.cpp
* 2022-06-01 K.OHWADA
*/
// describe processing in a class that inherits Interface Class
// https://qiita.com/kurun_pan/items/f2edd3b834dcaeaa8b2f
#include <iostream>
#include <memory>
/**
* class MessegeHandler
* interface class
*/
class MessegeHandler {
public:
MessegeHandler() = default;
virtual ~MessegeHandler() = default;
void onSuccess() {
onSuccessInternal();
}
void onError(const std::string& message) {
onErrorInternal(message);
}
protected:
virtual void onSuccessInternal() = 0;
virtual void onErrorInternal(const std::string& message) = 0;
};
class MessegeHandlerImple : public MessegeHandler {
public:
void onSuccessInternal() override {
std::cout << "call OnCuccess()" << std::endl;
}
void onErrorInternal(const std::string& message) override {
std::cout << "call OnError(): " << message << std::endl;
}
};
/**
* class Messenger
*/
class Messenger {
public:
Messenger() = default;
~Messenger() = default;
void setHandler(std::unique_ptr<MessegeHandler> handler) {
handler_ = std::move(handler);
}
void sendMessage(const std::string& message) {
if (message.size() == 0) {
if (handler_)
handler_->onError("error message");
return ;
}
if (handler_)
handler_->onSuccess();
}
private:
std::unique_ptr<MessegeHandler> handler_;
};
/**
* main
*/
int main() {
auto messenger = std::make_unique<Messenger>();
auto handler = std::make_unique<MessegeHandlerImple>();
messenger->setHandler(std::move(handler));
messenger->sendMessage("Send message");
messenger->sendMessage("");
return 0;
}