標籤:gem 複製 設計 初始化 目標 col 硬體 tar 方法
No1:
原型模式使用情境:
1)類初始化需要消耗非常多的資源,這個資源套件括資料、硬體資源等,通過原型複製避免這些消耗
2)通過new產生一個對象需要非常繁瑣的資料準備貨存取權限,這是可以使用原型模式
3)一個對象需要提供給其他對象訪問,而且各個調用者可能都需要修改其值時,可以考慮使用原型模式複製多個對象供調用者使用,即保護性拷貝
No2:
原型模式大部分是通過實現cloneable介面實現的,但通過clone拷貝對象時並不會執行建構函式。
No3:
Cloneable是一個標識介面,裡面的clone方法並不是Cloneable介面的,而是Object中的方法。
No4:
淺拷貝實際上並不是將原始文檔的所有欄位都重新構造了一份,而是副本文檔的欄位引用原始文檔的欄位,解決辦法就是採用深拷貝
No5:
ArrayList實現了Cloneable介面,屬於原型模式
No6:
Intent內部的複製方式是通過new Intent(this)建構函式進行拷貝。因為只有在對象的構造成本比較高或者構造較為麻煩的時候,才使用clone()函數實現高效率
No7:
PackageManagerService(PMS)啟動之後,會掃描系統中已安裝的apk目錄,PMS會解析apk包下的AndroidManifest.xml檔案得到APP的相關資訊,完成之後就構建好了整個apk的資訊樹。PMS對於apk的解析工作它在建構函式時就已經開始了。
No8:
PMS不僅需要載入系統已安裝的各類apk,在此之前還需要載入Framework資源與核心庫,載入了資源與核心庫之後才開始對掃描的指定目錄下的apk檔案進行解析。
No9:
startActivity最終也是調用startActivityForResult
No10:
在系統啟動時PackageManagerService會啟動,此時PMS將解析所有已安裝的應用的資訊,構建一個資訊表,當使用者通過Intent來跳轉到某個組件時,會根據Intent中包含的資訊到PMS中尋找對應的組件列表,最後跳轉到目標組件中。
No11:
原型模式有一個最重要的用途就是保護性拷貝,也就是某個對象對外可能是唯讀,為了防止外部對這個唯讀對象修改,通常可以通過返回一個對象拷貝的形式實現唯讀限制。
No12:
優點:
原型模式是在記憶體中二進位流的拷貝,要比直接new一個對象效能好很多,特別是要在一個迴圈體內產生大量的對象時,原型模式可以更好的體現其優點。
缺點:
既是優點也是缺點,直接在記憶體中拷貝,建構函式是不會執行的。優點是減少了約束,缺點也是減少了約束。
《Android源碼設計模式》--原型模式