added lab15 ex2
This commit is contained in:
parent
b964385405
commit
fa5b8bf520
103
src/lab15_observer/ex2/AnalogTimer.java
Normal file
103
src/lab15_observer/ex2/AnalogTimer.java
Normal file
@ -0,0 +1,103 @@
|
|||||||
|
package lab15_observer.ex2;
|
||||||
|
|
||||||
|
public class AnalogTimer implements TimerObserver {
|
||||||
|
private final MyTimer timer;
|
||||||
|
private static final String[][] digits = {
|
||||||
|
{
|
||||||
|
"┌─┐",
|
||||||
|
"│ │",
|
||||||
|
"└─┘"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
" ╷",
|
||||||
|
" │",
|
||||||
|
" ╵"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"╶─┐",
|
||||||
|
"┌─┘",
|
||||||
|
"└─╴"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"╶─┐",
|
||||||
|
" ─┤",
|
||||||
|
"╶─┘"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"╷ ╷",
|
||||||
|
"└─┤",
|
||||||
|
" ╵"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"┌─╴",
|
||||||
|
"└─┐",
|
||||||
|
"╶─┘"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"┌─╴",
|
||||||
|
"├─┐",
|
||||||
|
"└─┘"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"╶─┐",
|
||||||
|
" │",
|
||||||
|
" ╵"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"┌─┐",
|
||||||
|
"├─┤",
|
||||||
|
"└─┘"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"┌─┐",
|
||||||
|
"└─┤",
|
||||||
|
"╶─┘"
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
public AnalogTimer(MyTimer timer) {
|
||||||
|
this.timer = timer;
|
||||||
|
timer.registerObserver(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void update(int hours, int minutes, int seconds) {
|
||||||
|
String[] lines = {"", "", ""};
|
||||||
|
|
||||||
|
addDigit(lines, hours / 10);
|
||||||
|
addSpace(lines);
|
||||||
|
addDigit(lines, hours % 10);
|
||||||
|
|
||||||
|
addSep(lines);
|
||||||
|
|
||||||
|
addDigit(lines, minutes / 10);
|
||||||
|
addSpace(lines);
|
||||||
|
addDigit(lines, minutes % 10);
|
||||||
|
|
||||||
|
addSep(lines);
|
||||||
|
|
||||||
|
addDigit(lines, seconds / 10);
|
||||||
|
addSpace(lines);
|
||||||
|
addDigit(lines, seconds % 10);
|
||||||
|
|
||||||
|
System.out.println(lines[0]);
|
||||||
|
System.out.println(lines[1]);
|
||||||
|
System.out.println(lines[2]);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void addDigit(String[] lines, int digit) {
|
||||||
|
String[] parts = digits[digit];
|
||||||
|
for (int i = 0; i < 3; i++) {
|
||||||
|
lines[i] += parts[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
private void addSpace(String[] lines) {
|
||||||
|
lines[0] += " ";
|
||||||
|
lines[1] += " ";
|
||||||
|
lines[2] += " ";
|
||||||
|
}
|
||||||
|
private void addSep(String[] lines) {
|
||||||
|
lines[0] += " o ";
|
||||||
|
lines[1] += " ";
|
||||||
|
lines[2] += " o ";
|
||||||
|
}
|
||||||
|
}
|
8
src/lab15_observer/ex2/ClockTimer.java
Normal file
8
src/lab15_observer/ex2/ClockTimer.java
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
package lab15_observer.ex2;
|
||||||
|
|
||||||
|
public interface ClockTimer {
|
||||||
|
int getHour();
|
||||||
|
int getMinute();
|
||||||
|
int getSecond();
|
||||||
|
void tick();
|
||||||
|
}
|
15
src/lab15_observer/ex2/DigitalTimer.java
Normal file
15
src/lab15_observer/ex2/DigitalTimer.java
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
package lab15_observer.ex2;
|
||||||
|
|
||||||
|
public class DigitalTimer implements TimerObserver {
|
||||||
|
private final MyTimer timer;
|
||||||
|
|
||||||
|
public DigitalTimer(MyTimer timer) {
|
||||||
|
this.timer = timer;
|
||||||
|
timer.registerObserver(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void update(int hours, int minutes, int seconds) {
|
||||||
|
System.out.printf("Time: %02d:%02d:%02d%n", hours, minutes, seconds);
|
||||||
|
}
|
||||||
|
}
|
10
src/lab15_observer/ex2/Main.java
Normal file
10
src/lab15_observer/ex2/Main.java
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
package lab15_observer.ex2;
|
||||||
|
|
||||||
|
public class Main {
|
||||||
|
public static void main(String[] args) {
|
||||||
|
MyTimer clockTimer = new MyTimer();
|
||||||
|
|
||||||
|
new AnalogTimer(clockTimer);
|
||||||
|
new DigitalTimer(clockTimer);
|
||||||
|
}
|
||||||
|
}
|
53
src/lab15_observer/ex2/MyTimer.java
Normal file
53
src/lab15_observer/ex2/MyTimer.java
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
package lab15_observer.ex2;
|
||||||
|
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
|
public class MyTimer implements ClockTimer {
|
||||||
|
private final List<TimerObserver> observers = new ArrayList<>();
|
||||||
|
private Calendar cal;
|
||||||
|
private Timer timer;
|
||||||
|
|
||||||
|
public MyTimer() {
|
||||||
|
cal = Calendar.getInstance();
|
||||||
|
timer = new Timer();
|
||||||
|
timer.schedule(new TimerAction(), 0, 1000);
|
||||||
|
}
|
||||||
|
|
||||||
|
class TimerAction extends TimerTask {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
cal = Calendar.getInstance();
|
||||||
|
tick();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getHour() {
|
||||||
|
return cal.get(Calendar.HOUR_OF_DAY);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getMinute() {
|
||||||
|
return cal.get(Calendar.MINUTE);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getSecond() {
|
||||||
|
return cal.get(Calendar.SECOND);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void tick() {
|
||||||
|
for (TimerObserver o : observers) {
|
||||||
|
o.update(getHour(), getMinute(), getSecond());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void registerObserver(TimerObserver o) {
|
||||||
|
observers.add(o);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void removeObserver(TimerObserver o) {
|
||||||
|
observers.remove(o);
|
||||||
|
}
|
||||||
|
}
|
5
src/lab15_observer/ex2/TimerObserver.java
Normal file
5
src/lab15_observer/ex2/TimerObserver.java
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
package lab15_observer.ex2;
|
||||||
|
|
||||||
|
public interface TimerObserver{
|
||||||
|
void update(int hours, int minutes, int seconds);
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user