專案中使用的設計模式之狀態模式

2021-08-17 08:57:12 字數 1529 閱讀 6651

工作中可能會遇到很多重複的工作,重複的工作可能導致大量的工作量,可能會使重複的**過多,也可能會導致方法的耦合性太大,動一發而牽動全身,不防考慮一些設計模式來簡化工作。

所在專案:新工作流平台

功能點:切換推送代辦的方式

(kafka

推送代辦或者

rabbitmq

推送代辦

)

模式講解:

狀態模式把物件的行為包裝在不同的狀態物件裡,每乙個狀態物件都屬於乙個抽象狀態類的乙個子類。狀態模式的意圖是讓乙個物件在其內部狀態改變的時候,其行為也隨之改變。

狀態模式包含的角色:

(1)    環境(context)角色,也成上下文:定義乙個介面,介面中包含具體的狀態類例項。

publicclass acttodotaskmqmanager

if(state.equals(propconstant.wfpt_mq_state_rabbit))

}return mqstate;}}

複製**

acttodotaskmqmanager

讀取配置檔案中的配置的狀態和常量類對應的狀態相比較,來確定使用哪個狀態物件。此處實現不完美,應該在頁面提供乙個選擇rabbitmq還是kafka的功能,將推送代辦型別寫入資料庫,從資料庫讀取資料而不是從配置檔案中讀取。但是工作流kafka已經去除所以加了配置檔案。

(2)      抽象狀態(state)角色:定義乙個介面,用來封裝環境(context)物件中確定的乙個狀態所對應的行為。

public inte***ce acttodotaskmqstate

複製**

(3)    具體狀態(concretestate)角色:實現state介面,完成真正的業務邏輯。

@service("actrabbitmqtodotaskservice")

public class actrabbitmqtodotaskservice implementsacttodotaskmqstate{}

@service("actkafkatodotaskservice")

public class actkafkatodotaskservice implementsacttodotaskmqstate{}

複製**

客戶端呼叫:

acttodotaskmqmanager mqmanager = newacttodotaskmqmanager();

acttodotaskmqstate state = mqmanager.getmqstate();

state.sendtodomsgandupdatetodotask(distributetaskdto,todotasklist);

複製**

優點: 再來個rocketmq

,activemq

,只需要實現acttodotaskmqstate

介面即可,擴充套件性很好。

缺點:acttodotaskmqstate

介面中有多少方法就需要所有的實現類去實現該方法。

qq截圖20170621183312.png

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

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

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

簡介 在狀態模式 state pattern 中,類的行為是基於它的狀態改變的。這種型別的設計模式屬於行為型模式。在狀態模式中,我們建立表示各種狀態的物件和乙個行為隨著狀態物件改變而改變的 context 物件。使用場景 1 行為隨狀態改變而改變的場景。2 中包含大量與物件狀態有關的條件語句。優點 ...

設計模式之狀態模式

一 作用 允許乙個物件在其內部狀態改變時改變它的行為,物件看起來似乎修改了它的類。其別名為狀態物件 objects for states 狀態模式是一種物件行為型模式。二 例子 狀態抽象類 abstract class state 具體狀態類,每個狀態對應乙個類 class concretestat...