-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathStartegy-Design-Pattern.cpp
More file actions
103 lines (88 loc) · 1.77 KB
/
Startegy-Design-Pattern.cpp
File metadata and controls
103 lines (88 loc) · 1.77 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<bits/stdc++.h>
using namespace std;
class talkable{
public:
virtual void talk() = 0;
};
class normalTalk : public talkable {
public:
void talk() override {
cout << "Talking normally." << endl;
}
};
class noTalk: public talkable {
public:
void talk() override {
cout << "No talking allowed." << endl;
}
};
class walkable {
public:
virtual void walk() = 0;
};
class normalWalk : public walkable {
public:
void walk() override {
cout << "Walking normally." << endl;
}
};
class noWalk : public walkable {
public:
void walk() override {
cout << "No walking allowed." << endl;
}
};
class flyable {
public:
virtual void fly() = 0;
};
class normalFly : public flyable {
public:
void fly() override {
cout << "Flying normally." << endl;
}
};
class noFly : public flyable {
public:
void fly() override {
cout << "No flying allowed." << endl;
}
};
class robot{
talkable* talkBehavior;
walkable* walkBehavior;
flyable* flyBehavior;
public:
robot(talkable* t, walkable* w, flyable* f) {
talkBehavior = t;
walkBehavior = w;
flyBehavior = f;
}
void projection() {
cout << "Robot is ready for action!" << endl;
}
void performTalk() {
talkBehavior->talk();
}
void performWalk() {
walkBehavior->walk();
}
void performFly() {
flyBehavior->fly();
}
};
int main(){
robot* r1 = new robot(new normalTalk(), new normalWalk(), new normalFly());
r1->projection();
r1->performTalk();
r1->performWalk();
r1->performFly();
robot* r2 = new robot(new noTalk(), new noWalk(), new noFly());
r2->projection();
r2->performTalk();
r2->performWalk();
r2->performFly();
delete r1;
delete r2;
return 0;
}