53. State.java(インターフェース)
public interface State {
public abstract void doClock(Context context,
int hour);
public abstract void doUse(Context context);
public abstract void doAlarm(Context
context);
public abstract void doPhone(Context
context);
}
54. DayState.java
public class DayState implements State {
private static DayState singleton = new DayState();
private DayState() {
}
public static State getInstance() {
return singleton;
}
@Override
public void doClock(Context context, int hour) {
if (hour < 9 || 17 <= hour) {
context.changeState(NightState.getInstance());
}
}
55. DayState.java
@Override
public void doUse(Context context) {
context.recordLog("金庫使用(昼間)");
}
@Override
public void doAlarm(Context context) {
context.callSecurityCenter("非常ベル(昼間)");
}
@Override
public void doPhone(Context context) {
context.callSecurityCenter("通常の通話(昼間)");
}
@Override
public String toString() {
return "[昼間]";
}
}
56. NightState.java
public class NightState implements State {
private static NightState singleton = new NightState();
private NightState() {
}
public static State getInstance() {
return singleton;
}
@Override
public void doClock(Context context, int hour) {
if (9 <= hour && hour < 17) {
context.changeState(DayState.getInstance());
}
}
57. NightState.java
@Override
public void doUse(Context context) {
context.callSecurityCenter("非常:夜間の金庫使用!");
}
@Override
public void doAlarm(Context context) {
context.callSecurityCenter("非常ベル(夜間)");
}
@Override
public void doPhone(Context context) {
context.recordLog("夜間の通話録音");
}
@Override
public String toString() {
return "[夜間]";
}
}
58. Context.java(インターフェース)
public interface Context {
public abstract void setClock(int hour);
public abstract void changeState(State state);
public abstract void
callSecurityCenter(String msg);
public abstract void recordLog(String msg);
}
59. SafeFrame.java
import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Color;
import java.awt.Frame;
import java.awt.Panel;
import java.awt.TextArea;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class SafeFrame extends Frame implements Context , ActionListener{
// 現在時刻表示
private TextField textClock = new TextField(60);
// 警備センター出力
private TextArea textScreen = new TextArea(10, 60);
// 金庫使用ボタン
private Button buttonUse = new Button("金庫使用");
// 非常ベルボタン
private Button buttonAlarm = new Button("非常ベルボタン");
// 通常通話ボタン
private Button buttonPhone = new Button("通常通話");
// 終了ボタン
private Button buttonExit = new Button("終了");
private State state = DayState.getInstance();