你的API有「狀態」嗎?

2021-06-26 12:07:08 字數 2134 閱讀 2266

我相信有不少人還不明白有狀態和無狀態(stateful and stateless)的概念,那麼我們今天就來談談有狀態和無狀態,一方面不斷總結提高自我,另一方面兼掃盲。

有狀態就是有資料儲存功能。

有狀態物件(stateful bean),就是有例項變數的物件

,可以儲存資料,是非執行緒安全的。在不同方法呼叫間不保留任何狀態。 

無狀態就是一次操作,不能儲存資料。

無狀態物件(stateless bean),就是沒有例項變數的物件

.不能儲存資料,是不變類,是執行緒安全的。 

在使用基於有狀態類的api的時候,我們也許有機會呼叫很多跟狀態有關的公共方法,這些呼叫方式到底符不符合時機這是乙個很大的問題(我的**寫得足夠的防禦也最多就是拋異常罷了)。api的呼叫方需要做的事,1,忍受和處理異常 2,學習狀態類工作機制。沒辦法 你要寫乙個基於狀態類的api使用者就得做那麼多事,下面就是乙個狀態類的例子:

public abstract class stateful 

public 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()

}}

試想如果你一

下面這種順序呼叫api

stateful p = stateful.create("bad idea");

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頭...

你有留意嗎?

如果你在乙個平凡的家庭長大,如果你的父母還健在,不管你有沒有和他們同住 如果有一天,你發現媽媽的廚房不再像以前那麼乾淨 如果有一天,你發現家中的碗筷好象沒洗乾淨 如果有一天,你發現母親的鍋子不再雪亮 如果有一天,你發現父親的花草樹木已漸荒廢 如果有一天,你發現家中的地板衣櫃經常沾滿灰塵 如果有一天,...

你有高薪的籌碼嗎?

薪水是職場人士最關心的因素之一,也是評判乙個人職業發展順利與否的標準之一。可是高薪不是滋潤萬物的甘露。在現實中,有的人薪水如芝麻開花節節高,而更多的人則是長時間在低薪區內徘徊。那些高薪者有什麼秘訣?其實秘訣只有乙個 那就是他們手中有籌碼。學歷 行業經驗 公司背景 軟能力 職位等等,都是高薪的籌碼。苦...