設計模式筆記之狀態模式的使用

2021-09-01 07:45:04 字數 1298 閱讀 5195

簡介:在狀態模式(state pattern)中,類的行為是基於它的狀態改變的。這種型別的設計模式屬於行為型模式。

在狀態模式中,我們建立表示各種狀態的物件和乙個行為隨著狀態物件改變而改變的 context 物件。

使用場景:1、行為隨狀態改變而改變的場景。 2、**中包含大量與物件狀態有關的條件語句。

優點:1、列舉可能的狀態,在列舉狀態之前需要確定狀態種類。 2、將所有與某個狀態有關的行為放到乙個類中,並且可以方便地增加新的狀態,只需要改變物件狀態即可改變物件的行為。 3、允許狀態轉換邏輯與狀態物件合成一體,而不是某乙個巨大的條件語句塊。

缺點:1、狀態模式的使用必然會增加系統類和物件的個數。 2、狀態模式的結構與實現都較為複雜,如果使用不當將導致程式結構和**的混亂。 3、狀態模式對"開閉原則"的支援並不太好,對於可以切換狀態的狀態模式,增加新的狀態類需要修改那些負責狀態轉換的源**,否則無法切換到新增狀態,而且修改某個狀態類的行為也需修改對應類的源**。

實現案例:定義不同狀態類(statesa、statesb、statesc),在狀態類中定義改變狀態的動作changestates(doenviroment   de),以及該狀態下的具體行為實現doopt()。在執行類doenviroment中宣告狀態屬性state,以及屬性的set、get方法,並定義行為方法doopt( )

例如下:

public inte***ce states 

public class statesa implements states

@override

public void doopt()

}public class statesb implements states

@override

public void doopt()

}public class statesc implements states

@override

public void doopt()

}public class doenviroment

public void setstates(states state)

public states getstates()

public void doopt()

}public class lastestc

}

設計模式學習筆記之狀態模式

定義 狀態模式允許物件在內部狀態改變時改變它的行為,物件看起來好像修改了它的類。解決問題 主要解決的是當控制乙個物件狀態轉換的條件表示式過於複雜時的情況。把狀態判斷邏輯轉移到表示不同的一系列類當中,可以把複雜的邏輯判斷簡單化。結構圖 狀態模式所涉及到的角色有 環境 context 角色,也成上下文 ...

C 設計模式之狀態模式的使用

state pattern 是設計模式的一種,屬於行為模式。源於design pattern 當乙個物件的內在狀態改變時允許改變其行為,這個物件看起來像是改變了其類。狀態模式主要解決的是當控制乙個物件狀態的條件表示式過於複雜時的情況。把狀態的判斷邏輯轉移到表示不同狀態的一系列類中,可以把複雜的判斷邏...

設計模式筆記 狀態模式

當乙個物件內在狀態發生改變時允許其改變行為,這個物件看起來像改變了其類 state 抽象狀態角色 介面或抽象類,負責物件狀態定義,並且封裝環境角色以實現狀態切換 public abstract class state public abstract void handle1 public abstr...