設計模式 19 狀態模式

2021-08-04 13:00:58 字數 2930 閱讀 2492

狀態模式:

每個框框都代表了房間的狀態,箭頭表示房間狀態的轉換

狀態轉換介面:

package com.actionpattern.state.edition1;

public

inte***ce

state

房間類:

package com.actionpattern.state.edition1;

public

class

room

/*** 預訂房間

*@return void

*/public

void

bookroom()

/*** 退訂房間

*@return void

*/public

void

unsubscriberoom()

/*** 入住

*@return void

*/public

void

checkinroom()

/*** 退房

*@return void

*/public

void

checkoutroom()

public string tostring()

/** getter和setter方法

*/public state getfreetimestate()

public

void

setfreetimestate(state freetimestate)

public state getcheckinstate()

public

void

setcheckinstate(state checkinstate)

public state getbookedstate()

public

void

setbookedstate(state bookedstate)

public state getstate()

public

void

setstate(state state)

}

狀態轉換實際類:

現在是預定房間

package com.actionpattern.state.edition1;

/**

* 已預定房間 可以取消預定和入住

*/public

class

checkinstate

implements

state

public

void

bookroom()

public

void

checkinroom()

public

void

checkoutroom()

public

void

unsubscriberoom()

}

現在是入住房間

package com.actionpattern.state.edition1;

/**

* 入住狀態房間只能退房

*/public

class

bookedstate

implements

state

public

void

bookroom()

public

void

checkinroom()

public

void

checkoutroom()

public

void

unsubscriberoom()

}

現在是空閒狀態

package com.actionpattern.state.edition1;

/**

* 空閒狀態只能預訂和入住

*/public

class

freetimestate

implements

state

public

void

bookroom()

public

void

checkinroom()

public

void

checkoutroom()

public

void

unsubscriberoom()

}

測試

package com.actionpattern.state.edition1;

public

class test

//第一間房

rooms[0].bookroom(); //預訂

rooms[0].checkinroom(); //入住

rooms[0].bookroom(); //預訂

system.out.println(rooms[0]);

system.out.println("---------------------------");

//第二間房

rooms[1].checkinroom();

rooms[1].bookroom();

rooms[1].checkoutroom();

rooms[1].bookroom();

system.out.println(rooms[1]);}}

設計模式 19 狀態模式

物件中的狀態變更引起其狀態相關的行為發生變更。將狀態進行封裝,使狀態的變更在具體狀態類中進行傳遞,從而控制各個狀態下的行為。當乙個物件中有很多狀態,且各個狀態引起不同的行為切換時,可避免繁亂的分支判斷,即可以用狀態模式,將行為封裝,並通過狀態模式中的環境角色封裝狀態切換。狀態行為介面 public ...

19 設計模式 行為型 之狀態模式

封裝了轉換規則 列舉可能的狀態,在列舉狀態之前需要確定狀態種類 將所有與某個狀態有關的行為放到乙個類中,並且可以方便地增加新的狀態,只需要改變物件狀態即可改變物件的行為 允許狀態轉換邏輯與狀態物件合成一體,而不是某乙個巨大的條件語句塊 可以讓多個環境物件共享乙個狀態物件,從而減少系統中物件的個數 a...

設計模式 狀態模式

狀態模式 當乙個物件的內在狀態改變時允許改變其行為,這個物件看起來像是改變了其類。狀態模式主要解決的是當控制乙個物件狀態轉換的條件表示式過於複雜時的情況,把狀態的判斷邏輯轉移到表示不同狀態的一些列類當中,可以把複雜的判斷邏輯簡化。當乙個物件的行為取決於它的狀態,並且它必須在執行時刻根據狀態改變它的行...