-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathAnimal.java
More file actions
124 lines (86 loc) · 2.4 KB
/
Animal.java
File metadata and controls
124 lines (86 loc) · 2.4 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
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
package com.dj;
enum FlightStages implements Trackable {
GROUNDED, LAUNCH, CRUISE, DATA_COLLECTION;
@Override
public void track() {
if (this != GROUNDED) {
System.out.println("Monitoring " + this);
}
}
public FlightStages getNextStage() {
FlightStages[] allStages = values();
return allStages[(ordinal() + 1) % allStages.length];
}
}
record DragonFly(String name, String type) implements FlightEnabled {
@Override
public void takeOff() {
}
@Override
public void land() {
}
@Override
public void fly() {
}
}
class Satellite implements OrbitEarth {
FlightStages stage = FlightStages.GROUNDED;
public void achieveOrbit() {
transition("Orbit Achieved!");
}
@Override
public void takeOff() {
transition("taking Off");
}
@Override
public void land() {
transition("Landing");
}
@Override
public void fly() {
achieveOrbit();
transition("Data Collection while Orbiting");
}
public void transition(String description) {
System.out.println(description);
stage = transition(stage);
stage.track();
}
}
interface OrbitEarth extends FlightEnabled {
void achieveOrbit();
private static void log(String description) {
var today = new java.util.Date();
System.out.println(today + ": " + description);
}
private void logStage(FlightStages stage, String description) {
description = stage + ": " + description;
log(description);
}
@Override
default FlightStages transition(FlightStages stage) {
FlightStages nextStage = FlightEnabled.super.transition(stage);
logStage(stage, "Beginning Transition to " + nextStage);
return nextStage;
}
}
interface FlightEnabled {
double MILES_TO_KM = 1.60934;
double KM_TO_MILES = 0.621371;
void takeOff();
void land();
void fly();
default FlightStages transition(FlightStages stage) {
// System.out.println("transition not completed on " + getClass().getName());
// return null;
FlightStages nextStage = stage.getNextStage();
System.out.println("Transitioning from " + stage + " to " + nextStage);
return nextStage;
}
}
interface Trackable {
void track();
}
public abstract class Animal {
public abstract void move();
}