-
Notifications
You must be signed in to change notification settings - Fork 0
/
bridge.cpp
83 lines (66 loc) · 1.39 KB
/
bridge.cpp
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
#include <iostream>
#include <string>
class AbstractInterface {
public:
virtual void functionality() = 0;
};
class OS {
public:
virtual void extraFunctionality() = 0;
};
class Bridge: public AbstractInterface {
protected:
OS *implementation;
public:
explicit Bridge(OS *backend) {
implementation = backend;
}
};
class UseCase1: public Bridge {
public:
explicit UseCase1(OS *backend)
: Bridge(backend) {}
void functionality() override {
std::cout << "UseCase1 on ";
implementation->extraFunctionality();
}
};
class UseCase2: public Bridge {
public:
explicit UseCase2(OS *backend)
: Bridge(backend) {}
void functionality() override {
std::cout << "UseCase2 on ";
implementation->extraFunctionality();
}
};
struct Windows: public OS {
void extraFunctionality() override {
std::cout << "Windows!" << std::endl;
}
};
struct Linux: public OS {
void extraFunctionality() override {
std::cout << "Linux!" << std::endl;
}
};
int main() {
AbstractInterface *useCase = nullptr;
OS *windows = new Windows;
OS *linux = new Linux;
useCase = new UseCase1(windows);
useCase->functionality();
delete useCase;
useCase = new UseCase1(linux);
useCase->functionality();
delete useCase;
useCase = new UseCase2(windows);
useCase->functionality();
delete useCase;
useCase = new UseCase2(linux);
useCase->functionality();
delete useCase;
delete linux;
delete windows;
return 0;
}