很多東西處於不同狀態會有不同的表現,就像我們小時候看的迪加奧特曼,就有三種形態。類作為模擬這個世界的抽象,當然也可以具備這樣的屬性啦!
狀態模式:當乙個物件的內在狀態改變時允許改變其行為,這個物件看起來像是改變了其類。
解決的問題:主要解決的是當控制乙個物件狀態轉換的條件表示式過於複雜時的情況。把狀態的判斷邏輯轉移到表示不同的一系列類當中,可以把複雜的邏輯判斷簡單化。
例項:
迪迦奧特曼根據怪獸的型別變換形態,如果三種形態都打不過,打出gg。
package state;
public abstract class state
public void setflag(int flag)
}
package state;
public class statea extends state
@override
public void handle(context context, int cou)
else
} }}
package state;
public class stateb extends state
@override
public void handle(context context, int cou)
else
} }}
package state;
public class statec extends state
@override
public void handle(context context, int cou)
else
} }}
package state;
public class context
//這個cou是用來跳出遞迴的 用遞迴節省大量判斷邏輯,但會影響效率
public void fightmonster(int cou)
public state getstate()
public void setstate(state state)
public int getflag()
public void setflag(int flag)
}
package state;
public class client
}
模式總結:優點狀態模式將與特定狀態相關的行為區域性化,並且將不同狀態的行為分割開來。
所有狀態相關的**都存在於某個conceretestate中,所以通過定義新的子類很容易地增加新的狀態和轉換。
狀態模式通過把各種狀態轉移邏輯分布到state的子類之間,來減少相互間的依賴。
缺點
導致較多的concretestate子類
適用場景
當乙個物件的行為取決於它的狀態,並且它必須在執行時刻根據狀態改變它的行為時,就可以考慮使用狀態模式。
乙個操作中含有龐大的分支結構,並且這些分支決定於物件的狀態。
設計模式之狀態模式
一 作用 允許乙個物件在其內部狀態改變時改變它的行為,物件看起來似乎修改了它的類。其別名為狀態物件 objects for states 狀態模式是一種物件行為型模式。二 例子 狀態抽象類 abstract class state 具體狀態類,每個狀態對應乙個類 class concretestat...
設計模式之 狀態模式
gof 設計模式 中給狀態模式下的定義為 允許乙個物件在其內部狀態改變時改變它 的行為。這個物件看起來似乎修改了它的類。看起來,狀態模式好像是神通廣大 居然能夠 修改自身的類 能夠讓程式根據不同的外部情況來做出不同的響應,最直接的方法就是在程式中將這些可能發生的外部情況全部考慮到,使用 if els...
設計模式之狀態模式
定義 允許乙個物件在其內部狀態變化時改變它的行為,物件看起來似乎修改了它所屬的類。類圖 說明 context表示環境類,它定義了客戶應用程式感興趣的介面,並維護乙個concretestate子類的例項,這個例項用於定義當前狀態 state表示抽象狀態類,它定義了乙個介面以封裝與context的乙個特...