在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/Java/ 狀態(tài)模式如何在多實(shí)例的情況下應(yīng)用?

狀態(tài)模式如何在多實(shí)例的情況下應(yīng)用?

圖片描述

剛學(xué)了設(shè)計(jì)模式,想在實(shí)際項(xiàng)目里應(yīng)用一下,是一個(gè)項(xiàng)目管理的審批流程,業(yè)務(wù)對(duì)象是project

使用spring框架,請(qǐng)問如何解決不同項(xiàng)目對(duì)象的狀態(tài)上下文Context的保存問題?我設(shè)想的每個(gè)項(xiàng)目應(yīng)該是獨(dú)立的流程,這個(gè)狀態(tài)還是能夠被持久化的


在head first 設(shè)計(jì)模式的書里我發(fā)現(xiàn)了解答,但是沒看懂,說(shuō)是多實(shí)例之間可以共享狀態(tài)對(duì)象,但不能持有他們自己的內(nèi)部狀態(tài),需要把每個(gè)狀態(tài)都指定到靜態(tài)的實(shí)例變量中。如果你的狀態(tài)需要利用到Context中的方法或者變量實(shí)例,你還必須在每個(gè)handle方法內(nèi)傳入一個(gè)context的引用。

回答
編輯回答
亮瞎她

我目前的解決方案是這樣的,給context對(duì)象增加一個(gè)帶參數(shù)的構(gòu)造方法,傳入一個(gè)porject對(duì)象的引用,project對(duì)象中的有個(gè)status字段標(biāo)記狀態(tài),根據(jù)switch來(lái)切換context的當(dāng)前state。而狀態(tài)模式只負(fù)責(zé)改變這個(gè)狀態(tài)字段,每個(gè)handle方法也接受project,返回也返回project,在handle方法內(nèi)部,改變project的這個(gè)字段,持久化的時(shí)候保存project對(duì)象。

其中有個(gè)坑是是保存project對(duì)象這個(gè)方法,我之前想把service寫在handle里,但是發(fā)現(xiàn)注入為null,想起來(lái)初始化的時(shí)候是new的context,脫離了spring生命周期,然后就把構(gòu)造方法都刪了,全部換成注解注入。但是這時(shí)候context里保存當(dāng)前狀態(tài)的state就不知道如何注入了。最后我又全改成了書上構(gòu)造器創(chuàng)建對(duì)象的方法。

2018年8月13日 21:07