我相信有不少人還不明白有狀態和無狀態(stateful and stateless)的概念,那麼我們今天就來談談有狀態和無狀態,一方面不斷總結提高自我,另一方面兼掃盲。
有狀態就是有資料儲存功能。有狀態物件(stateful bean),就是有例項變數的物件
,可以儲存資料,是非執行緒安全的。在不同方法呼叫間不保留任何狀態。
無狀態就是一次操作,不能儲存資料。
無狀態物件(stateless bean),就是沒有例項變數的物件
.不能儲存資料,是不變類,是執行緒安全的。
在使用基於有狀態類的api的時候,我們也許有機會呼叫很多跟狀態有關的公共方法,這些呼叫方式到底符不符合時機這是乙個很大的問題(我的**寫得足夠的防禦也最多就是拋異常罷了)。api的呼叫方需要做的事,1,忍受和處理異常 2,學習狀態類工作機制。沒辦法 你要寫乙個基於狀態類的api使用者就得做那麼多事,下面就是乙個狀態類的例子:
public abstract class statefulpublic abstract void start(int totalamount);
public abstract void progress(int howmuch);
public abstract void finish();
// finish: progress.api
stateful()
private static stateful createimpl(string name)
private static final class impl extends stateful
@override
public void start(int totalamount)
@override
public void progress(int howmuch)
current = howmuch;
}@override
public void finish()
}}
試想如果你一stateful p = stateful.create("bad idea");下面這種順序呼叫api
p.progress(10);
p.finish();
你得到的會是乙個runtimeexception,原因是你忘記啟動它了,從常識來講我們的確應該先啟動它才能有進度。但是這只是乙個簡單的例子 ,我們不能保證所有的狀態機業務都跟這個一樣簡單用常識都能排錯!久而久之這樣的api會報廢掉,因為它要的太多了!
當我們把上述的狀態機方法適當的歸類,乙個處於配置 另外乙個屬於過程,用配置去例項化過程。
public abstract class stateless
public abstract inprogress start(int totalamount);
public abstract class inprogress
}
private static stateless createimpl(string name)
private static final class impl extends stateless
@override
public inprogress start(int totalamount)
private class inimpl extends inprogress
@override
public void progress(int howmuch)
@override
public void finish() }}
} 這樣就解決了過程的初始化問題:
stateless p = stateless.create("good idea!");
inprogress progress = p.start(10);
// without calling start(), there is no way to call progress() method
progress.progress(10);
progress.finish();
面試 你了解API嗎?
整體規範建議採用restful 方式來實施。api與使用者的通訊協議,總是使用https協議,確保互動資料的傳輸安全。應該盡量將api部署在專用網域名稱之下。如果確定api很簡單,不會有進一步擴充套件,可以考慮放在主網域名稱下。應該將api的版本號放入url。v 另一種做法是,將版本號放在http頭...
你有留意嗎?
如果你在乙個平凡的家庭長大,如果你的父母還健在,不管你有沒有和他們同住 如果有一天,你發現媽媽的廚房不再像以前那麼乾淨 如果有一天,你發現家中的碗筷好象沒洗乾淨 如果有一天,你發現母親的鍋子不再雪亮 如果有一天,你發現父親的花草樹木已漸荒廢 如果有一天,你發現家中的地板衣櫃經常沾滿灰塵 如果有一天,...
你有高薪的籌碼嗎?
薪水是職場人士最關心的因素之一,也是評判乙個人職業發展順利與否的標準之一。可是高薪不是滋潤萬物的甘露。在現實中,有的人薪水如芝麻開花節節高,而更多的人則是長時間在低薪區內徘徊。那些高薪者有什麼秘訣?其實秘訣只有乙個 那就是他們手中有籌碼。學歷 行業經驗 公司背景 軟能力 職位等等,都是高薪的籌碼。苦...