物件中的狀態變更引起其狀態相關的行為發生變更。將狀態進行封裝,使狀態的變更在具體狀態類中進行傳遞,從而控制各個狀態下的行為。
當乙個物件中有很多狀態,且各個狀態引起不同的行為切換時,可避免繁亂的分支判斷,即可以用狀態模式,將行為封裝,並通過狀態模式中的環境角色封裝狀態切換。
狀態行為介面
public inte***ce stateopt
抽象狀態類
public abstract class abstractstate implements stateopt
}
具體狀態角色
public class concreteabstractstate1 extends abstractstate
@override
public void opt2()
}
public class concreteabstractstate2 extends abstractstate
@override
public void opt2()
}
上下文環境角色
public class context implements stateopt
public void setcurrentstate(abstractstate currentstate)
@override
public void opt1()
@override
public void opt2()
}
測試驅動
public class client
}
設計模式 19 狀態模式
狀態模式 每個框框都代表了房間的狀態,箭頭表示房間狀態的轉換 狀態轉換介面 package com.actionpattern.state.edition1 public inte ce state 房間類 package com.actionpattern.state.edition1 publi...
19 設計模式 行為型 之狀態模式
封裝了轉換規則 列舉可能的狀態,在列舉狀態之前需要確定狀態種類 將所有與某個狀態有關的行為放到乙個類中,並且可以方便地增加新的狀態,只需要改變物件狀態即可改變物件的行為 允許狀態轉換邏輯與狀態物件合成一體,而不是某乙個巨大的條件語句塊 可以讓多個環境物件共享乙個狀態物件,從而減少系統中物件的個數 a...
設計模式 狀態模式
狀態模式 當乙個物件的內在狀態改變時允許改變其行為,這個物件看起來像是改變了其類。狀態模式主要解決的是當控制乙個物件狀態轉換的條件表示式過於複雜時的情況,把狀態的判斷邏輯轉移到表示不同狀態的一些列類當中,可以把複雜的判斷邏輯簡化。當乙個物件的行為取決於它的狀態,並且它必須在執行時刻根據狀態改變它的行...