任何人都可以共享例如使用state pattern與flyweight pattern(輕量級的模式是一個用於創建對象的狀態,以節省內存)?國家和輕量級模式
UPDATE: 如何使用的狀態和FW圖案的組合?
任何人都可以共享例如使用state pattern與flyweight pattern(輕量級的模式是一個用於創建對象的狀態,以節省內存)?國家和輕量級模式
UPDATE: 如何使用的狀態和FW圖案的組合?
自動裝箱使用輕量級圖案到對象創建最小化(對於整數的小值)
例如對於布爾和字節,所有可能的值都被緩存。
Java使用狀態爲許多部件,但是狀態機還包括通過狀態切換功能。
這裏是我使用enum
http://vanillajava.blogspot.com/2011/06/java-secret-using-enum-as-state-machine.html
*「Autoboxing是一個輕量級模式的例子」* [原文如此...這是不是一個奇怪的措辭和一個更奇怪的例子!?人們可以說,與自動裝箱相比,小值的緩存/重用實際上是一個細節。此外,flyweight模式的目標是節省內存,自動裝箱是節省內存的**最後一件事情。在將默認Java Map中的整數{key,values}存儲爲與Trove TIntIntHashMap中的相同值時相比,我甚至不會提及內存浪費。所以我認爲說「Autoboxing是一個輕量級模式的例子」可能有點奇怪。 – TacticalCoder 2012-02-04 12:18:20
與實際功能相比,Flyweights通常只是細節。這是因爲它們的設計基本上是透明的。即純粹出於性能原因完成。 – 2012-02-04 12:45:08
使用HashMap和TIntIntHashMap的區別在於條目的組織方式。如果整數被緩存,則大小將相同。例如如果您比較了'TIntArrayList'和'ArrayList
我通常使用狀態模式來避免的條件語句。
代替使用:
switch (state)
{
case ParserState.BeforeMethod:
//do some processing
break;
case ParserState.InMethod:
//do some processing
break;
}
我可以只寫:
currentState = currentState.process(context);
樣品類可以看起來像
public class SomeClass : ParserState
{
public ParserState process(IParserContext context)
{
//do some proceccing
if (m_completed)
return new SomeOtherState();
return this;
}
}
即邏輯被移動到小的類,其是用於處理特定的狀態。所以,你得到了兩兩件事:
你有兩個問題寫了一個例子。每種模式一個。將其中一個移至單獨的問題 – jgauffin 2012-02-04 10:45:03
這些wiki頁面中的每個*都有*示例。在Java中。 – 2012-02-04 11:07:37
@jgauffin至於我可以看到他已經問了一個問題,如何使用的狀態和FW圖案的組合 – DPM 2012-02-04 11:28:56