可以把各種狀態的處理,各自包裝形成一個獨立的State Class
也就是說,透過State切割,把複雜的處理,切割成各自獨立小的區塊,
每個State很單純的處理該狀態下的執行功能,
以這方式執行,亦可很輕易的擴充程式功能
參與者
1.State 介面
定義出所有State所允許被呼叫的共同function
public interface State {
public void showMessage(String user);
}
2.DayState 依照State實作出的Class
public class DayState implements State {
private static DayState instance=new DayState();
public static DayState getInstance(){
return instance;
}
@Override
public void showMessage(String user) {
System.out.println(user+" : Its Day");
}
}
3.NightState 依照State實作出的Class
public class NightState implements State {
private static NightState instance=new NightState();
public static NightState getInstance(){
return instance;
}
@Override
public void showMessage(String user) {
System.out.println(user+" : its Night");
}
}
4.MyFrame 使用State的主要程式
包含了setState function作為狀態轉移使用
在這裡要執行的動作,都只需要呼叫state的method即可,不需要
考慮真正的State實體是哪一個,
State的轉換都會透過外部呼叫setState來改變
public class MyFrame {
private State state;
public MyFrame(){}
public void setState(String info){
if(info=="day"){
state=DayState.getInstance();
}else{
state=NightState.getInstance();
}
}
public void showMessage(String user){
state.showMessage(user);
}
}
5.Main 外部程式
MyFrame frame=new MyFrame();
for(int hour=1;hour<=24;hour++){
if((hour>=8)&&(hour<=18)){
frame.setState("day");
}else{
frame.setState("night");
}
frame.showMessage("ozzy");
try{
Thread.sleep(1000);
}catch(InterruptedException e){}
}
沒有留言:
張貼留言