使用場景:狀態(tài)和行為比較復(fù)雜時熙含,為了避免大量if else罚缕,可以使用狀態(tài)模式。
包含要素:
Context:環(huán)境類怎静,包含一些內(nèi)部狀態(tài)
State:抽象狀態(tài)類
ConcreteState:具體狀態(tài)類邮弹,用來處理來自Context的請求
示例demo:購買商品后,訂單狀態(tài)有待發(fā)貨蚓聘,待收貨腌乡,待評價,關(guān)閉夜牡,用戶可以退貨与纽,收貨侣签,評價。但是特定的行為要在特定狀態(tài)下發(fā)生急迂。如評價只能在待評價狀態(tài)下才能操作影所。
抽象狀態(tài)類,關(guān)聯(lián)上下文僚碎,定義方法
待發(fā)貨狀態(tài)猴娩,可以退貨,退貨后修改狀態(tài)
待收貨狀態(tài)勺阐,可以退貨和收貨卷中,并修改狀態(tài)
待評價狀態(tài),只能進行評價渊抽,評級完之后修改狀態(tài)
關(guān)閉狀態(tài)為最終狀態(tài)
context上下文蟆豫,定義所有的狀態(tài),并且設(shè)置狀態(tài)時要把上下文賦值給狀態(tài)類懒闷,定義所有方法十减,調(diào)用具體狀態(tài)類的方法
客戶端,創(chuàng)建上下文毛雇,設(shè)置初始狀態(tài)嫉称,然后發(fā)起行為