string類也有這種常量池技術!
感覺類似工廠, 用容器儲存要使用的物件,如果建立過就從容器中取 ,避免記憶體移除。
message.obtain();
handler中的訊息池 儲存容器是單鏈表o
message obtain()
return new message(); }
每個message都有乙個同型別的next欄位,這個next指向下乙個可用的message,最後乙個可用的message的next則為空。
obtain()方法中只看到了從鍊錶中獲取物件,並沒有看到儲存到鍊錶中,檢視message類說明時發現
which will pull* them from a pool of recycled objects.原來建立的時候不會把message物件放到池中在**時才會
搜尋後發現
public voidrecycle()
return;
}
//清空狀態並把訊息新增到池中recycleunchecked();
}
void插入資料方式是從鍊錶中插入表頭 鍊錶size++recycleunchecked()
}}
取message方式是取表頭 表頭指標spool 指向下乙個節點 size--
這裡並不是經典的實現方式,它沒有內部、外部狀態,集各個職責於一身,更像乙個物件池。靈活運用模式解決問題。
規則很多時候並不是一成 不變的。
activitythread.main
public static voidmain(string args)
if (false)
// end of event activitythreadmain.
trace.traceend(trace.trace_tag_activity_manager);
looper.loop();
throw new runtimeexception("main thread loop unexpectedly exited");
}
享元模式 物件的復用
享元模式,通過共享物件的方式有效地支援大量細粒度的物件。1 先看下這個模式點關鍵點 物件池 該模式的最大特點就是實現物件的快取,以避免物件的重複建立,從而達到提公升效能和記憶體使用優化的目的 狀態外部化 為實現該模式,另外的乙個特點就是狀態外部化,以方便快取物件的訪問。2 我們再來看下它的類圖關係 ...
實現物件的復用 享元模式(四)
sunny軟體公司開發人員通過對圍棋棋子進行進一步分析,發現雖然黑色棋子和白色棋子可以共享,但是它們將顯示在棋盤的不同位置,如何讓相同的黑子或者白子能夠多次重複顯示且位於乙個棋盤的不同地方?解決方法就是將棋子的位置定義為棋子的乙個外部狀態,在需要時再進行設定。因此,我們在圖14 4中增加了乙個新的類...
實現物件的復用 享元模式(二)
分享一下我老師大神的人工智慧教程。零基礎!通俗易懂!風趣幽默!還帶黃段子!希望你也加入到我們人工智慧的隊伍中來!享元模式結構較為複雜,一般結合工廠模式一起使用,在它的結構圖中包含了乙個享元工廠類,其結構圖如圖14 3所示 圖14 3 享元模式結構圖 在享元模式結構圖中包含如下幾個角色 flyweig...