-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathstrategy_pattern.kt
98 lines (64 loc) · 1.64 KB
/
strategy_pattern.kt
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
//Strategy Pattern
//In strategy pattern you primarly focus on assignning values dynamically without re-writing a lot code
//https://pl.kotl.in/jfxX1ctap
fun main() {
fly(MallardDuck())
fly(RoboDuck())
fly(FLexibleDuck(FlyHigh(), MuteQuak()))
quak(MallardDuck())
quak(RoboDuck())
quak(FLexibleDuck(FlyHigh(), MuteQuak()))
}
fun fly(duck: Duck) = duck.performFly()
fun quak(duck: Duck) = duck.perfromQuak()
abstract class Duck(val flayable: Flyable, val quackBehaviour: QuakBehaviour) {
fun performFly() = flayable.fly()
fun perfromQuak() = quackBehaviour.quak()
abstract fun swim()
}
class MallardDuck : Duck(NoFly(), LoudQuak()){
override fun swim(){
print("Mallard Duck swims!")
}
}
class RoboDuck : Duck(NoFly(), MuteQuak()){
override fun swim(){
print("Robot Duck swims!")
}
}
class FLexibleDuck(val flyable: Flyable, val quakBehaviour: QuakBehaviour): Duck(flyable, quakBehaviour){
override fun swim(){
print("FLexibleDuck Duck swims!")
}
}
interface Flyable{
fun fly()
}
class FlyHigh: Flyable{
override fun fly(){
print("We fly high!!!!")
}
}
class FlyLow: Flyable{
override fun fly(){
print("We fly lowwww!!!!")
}
}
class NoFly: Flyable{
override fun fly(){
print("We don't fly")
}
}
interface QuakBehaviour{
fun quak()
}
class MuteQuak: QuakBehaviour{
override fun quak(){
print("mute quakkk!!")
}
}
class LoudQuak: QuakBehaviour{
override fun quak(){
print("loud quakkk!!")
}
}