設計模式 狀態模式

2021-07-04 02:40:36 字數 2349 閱讀 6666

state pattern

要說建造者模式是按照客戶提供的順序執行,那麼這個是應對多種複雜順序而設計,擴充套件性都差不多,倆者結合起來將會起到非常好的封裝效果。

建造者模式適應

狀態模式適應

例子

電梯有四種狀態,關門,開門,執行,停止,在開門的時候不能執行,在執行的時候不能開門.......  第一感覺就是拿四個變數來判斷,這樣太難看了。

狀態類抽象

public abstract class liftstate 

public abstract void open();

public abstract void close();

public abstract void run();

public abstract void stop();

}

關閉狀態

public class closingstate extends liftstate 

@override

public void open()

@override

public void run()

@override

public void stop()

}

停止狀態

public class stoppingstate extends liftstate 

@override

public void open()

@override

public void run()

@override

public void stop()

}

執行狀態

public class runningstate extends liftstate 

@override

public void open()

@override

public void run()

@override

public void stop()

}

開門狀態

public class openningstate extends liftstate 

@override

public void open()

@override

public void run()

@override

public void stop()

}

上下文物件

public class context 

public void setliftstate(liftstate liftstate)

public void close()

public void open()

public void run()

public void stop()

}

場景測試

public class client }/*

上下文物件context,成員屬性liftstate,可設定四種狀態,獲取和改變狀態,相當於乙個公共容器

四種狀態的抽象liftstate,成員屬性context,可設定上下文物件,讓四種狀態都擁有同乙個context

你中有我,我中有你,通過容器context可以進行狀態的切換,將四者聯合成一體

當狀態改變時,通過父類的統一context改變了liftstate狀態,然後呼叫了改變後狀態的方法

也就是說

*/

結果

lift is open...

close the lift

lift is runing...

the lift is stoped

我是菜鳥,我在路上。

設計模式 狀態模式

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

設計模式 狀態模式

1.概述 當乙個物件的內在狀態改變時允許改變其行為,這個物件看起來像是改變了其類。2.解決的問題 主要解決的是當控制乙個物件狀態轉換的條件表示式過於複雜時的情況。把狀態的判斷邏輯轉移到表示不同的一系列類當中,可以把複雜的邏輯判斷簡單化。3.模式中的角色 3.1 上下文環境 context 它定義了客...

設計模式 狀態模式

描述 允許物件在內部狀態改變時改變它的行為,物件看起來好像修改了它的類。主要解決的是當控制乙個物件狀態轉換的條件表示式過於複雜時的情況。把狀態的判斷邏輯轉移到表示不同的一系列類當中,可以把複雜的邏輯判斷簡單化。通常應用在有好多狀態的流程中。類圖 以下程式模擬糖果機器投幣取糖果的狀態流程。1.定義狀態...