星矢
雅典娜
狀態模式
觀察者模式
話說星矢和很強的某斗士甲對打
正常
以上狀態轉變用狀態模式來表現
Java代碼
public class Saiya extends Observable {
//定義星矢的四種狀態
public final SaiyaState NORMAL = new NormalState(this);
public final SaiyaState DYING = new DyingState(this);
public final SaiyaState GODDESS = new GoddessState(this);
public final SaiyaState UNIVERSE = new UniverseState(this);
private SaiyaState state=NORMAL;
private SaiyaState laststate=null;
public void hit(){
//調用當前狀態的被打方法 反過來改變自己的狀態
state
}
public String status(){
//當前狀態名
return state
}
protected void setState(SaiyaState state){
laststate=this
this
//觀察者模式
setChanged();
notifyObservers(
}
public String getlastStatus(){
return laststate
}
public class Saiya extends Observable {
//定義星矢的四種狀態
public final SaiyaState NORMAL = new NormalState(this);
public final SaiyaState DYING = new DyingState(this);
public final SaiyaState GODDESS = new GoddessState(this);
public final SaiyaState UNIVERSE = new UniverseState(this);
private SaiyaState state=NORMAL;
private SaiyaState laststate=null;
public void hit(){
//調用當前狀態的被打方法 反過來改變自己的狀態
state
}
public String status(){
//當前狀態名
return state
}
protected void setState(SaiyaState state){
laststate=this
this
//觀察者模式
setChanged();
notifyObservers(
}
public String getlastStatus(){
return laststate
}
星矢的狀態
Java代碼
public abstract class SaiyaState {
protected Saiya saiya;
public SaiyaState(Saiya saiya) {
this
}
public String status(){
String name=getClass()
return name
}
//星矢被打了
public abstract void hit();
}
public abstract class SaiyaState {
protected Saiya saiya;
public SaiyaState(Saiya saiya) {
this
}
public String status(){
String name=getClass()
return name
}
//星矢被打了
public abstract void hit();
}
在每種狀態裡面實現被打的時候所需要更改的狀態
Java代碼
public class UniverseState extends SaiyaState {
/**
* @param saiya
*/
public UniverseState(Saiya saiya) {
super(saiya);
}
/* 小宇宙爆發狀態被打進入瀕死狀態
*
*/
public void hit() {
saiya
}
}
public class UniverseState extends SaiyaState {
/**
* @param saiya
*/
public UniverseState(Saiya saiya) {
super(saiya);
}
/* 小宇宙爆發狀態被打進入瀕死狀態
*
*/
public void hit() {
saiya
}
}
雅典娜在一邊看
Java代碼
public class Athena implements Observer {
/* 我是雅典娜 我是觀察者
*
*/
public void update(Observable arg
System
}
}
public class Athena implements Observer {
/* 我是雅典娜 我是觀察者
*
*/
public void update(Observable arg
System
}
}
總的來看 這個過程就是這樣子
Java代碼
public class StateMain {
public static void main(String[] args) {
Saiya saiya = new Saiya();
Observer athena = new Athena();
saiya
System
for (int i =
System
saiya
System
}
}
}
public class StateMain {
public static void main(String[] args) {
Saiya saiya = new Saiya();
Observer athena = new Athena();
saiya
System
for (int i =
System
saiya
System
}
}
}
結果星矢在雅典娜的幫助下
Java代碼
星矢最初的狀態是
星矢被揍了
雅典娜說
星矢現在的狀態是
星矢被揍了
雅典娜說
星矢現在的狀態是
星矢被揍了
雅典娜說
星矢現在的狀態是
星矢被揍了
雅典娜說
星矢現在的狀態是
星矢被揍了
雅典娜說
星矢現在的狀態是
星矢最初的狀態是
星矢被揍了
雅典娜說
星矢現在的狀態是
星矢被揍了
雅典娜說
星矢現在的狀態是
星矢被揍了
雅典娜說
星矢現在的狀態是
星矢被揍了
雅典娜說
星矢現在的狀態是
星矢被揍了
雅典娜說
星矢現在的狀態是
總結
From:http://tw.wingwit.com/Article/program/Java/gj/201311/27341.html