設計模式行為型
1.觀察者模式
2.模板模式
3.策略模式
4.職責鏈模式
5.狀態模式
6.迭代器模式
7.訪問者模式
8.備忘錄模式
9.命令模式
10.直譯器模式
11.中介模式
對有狀態的物件,把複雜的「判斷邏輯」提取到不同的狀態物件中,允許狀態物件在其內部狀態發生改變時改變其行為。
環境類(context)角色:也稱為上下文,它定義了客戶端需要的介面,內部維護乙個當前狀態,並負責具體狀態的切換。
抽象狀態(state)角色:定義乙個介面,用以封裝環境物件中的特定狀態所對應的行為,可以有乙個或多個行為。
具體狀態(concrete state)角色:實現抽象狀態所對應的行為,並且在需要的情況下進行狀態切換。
狀態模式一般用來實現狀態機,而狀態機常用在遊戲、工作流引擎等系統開發中。不過,狀態機的實現方式有多種,除了狀態模式,比較常用的還有分支邏輯法和查表法。
假設商店設定了會員制,分為初級、中級、高階**,初始位初級會員,積分0到1000為初級,1000到3000為中級,3000及以上為高階會員,會員可以通過購買物品獲得積分,長時間沒有購買會減去一定的積分
狀態模式實現:
public inte***ce state
public class lowstate implements state
@override
public void obtain()
//公升級可以連續
if(context.getpoints()>=3000)
}@override
public void decrease()
}public class middlestate implements state
@override
public void obtain()
}@override
public void decrease()
}}public class highstate implements state
@override
public void obtain()
@override
public void decrease()
}}public class context
public state getstate()
public void setstate(state state)
public context()
//獲得了積分
public void obtain(int points)
//減少了積分
public void decrease(int points)
}
狀態模式會引入非常多的狀態類,會導致**比較難維護。相反,像電商下單、外賣下單這種型別的狀態機,它們的狀態並不多,狀態轉移也比較簡單,但事件觸發執行的動作包含的業務邏輯可能會比較複雜,所以,更加推薦使用狀態模式來實現。 Java設計模式 行為型 狀態模式
身為億億萬萬勞苦大眾的一員,每天可以做的基本上就兩件事,一件就是太累休息一會,另一件就是為了養家拼命的工作。什麼情況下應當休息,什麼情況下應當工作。答案很簡單,要看上班還是下班了。千千萬的勞苦大眾 public class person 應當休息還是工作,看下現在的狀態 public void re...
設計模式之狀態模式 行為型
乙個物件在其內部狀態改變時改變其行為,這個物件我們可以稱為狀態物件,所以狀態模式是一種物件行為型模式。上下文類 public class context public void setstate state state public state getstate 抽象狀態類 public abstr...
設計模式 行為型設計模式 5 狀態模式(php)
行為型設計模式 狀態模式 狀態模式 state pattern 屬於行為型模式之一,它允許乙個物件在其內部狀態發生改變時而改變它的行為,看起來像修改了它的類。1 context環境類角色 定義了客戶感興趣的訪問介面 維護concretestate子類的例項 並且定義當前相關的狀態 2 抽象狀態類角色...