結構模式之一旨在透過與相似物件共享盡可能多的資料來減少記憶體使用。
它在處理大量相似物件時特別有用,因為為每個物件建立一個新實例在記憶體消耗方面會非常昂貴。
關鍵概念:
內在狀態:多個物件之間共享的狀態獨立於上下文,並且在不同物件之間保持相同。
外部狀態:每個物件唯一的、從客戶端傳遞的狀態。此狀態可能會有所不同,並且不會儲存在 蠅量級 物件中
主要參與者:
蠅量級:蠅量級 物件接收外部狀態並使用它的介面。
Concrete蠅量級:實作 蠅量級 並儲存內在狀態。
蠅量級Factory:管理蠅量級物件並確保介面共享,如果存在則傳回現有的蠅量級。
Client(如 Main 類別):維護 蠅量級 的引用,並在需要與 蠅量級 物件互動時提供外部狀態。
讓我們舉一個角色的享元物件的例子
假設我們有一個文字編輯器需要渲染大量文字。每個字元都可以表示為一個對象,但是為每個字元都有一個單獨的對象會浪費大量記憶體。相反,我們可以使用 蠅量級s 來共享代表每個字母的字元對象,並儲存外部狀態,例如外部的位置或格式
蠅量級
public interface 蠅量級 { public void display(int x, int y);//x, y are the extrinsic state of the 蠅量級 object }
具體蠅量
public class Character蠅量級 implements 蠅量級 { private char ch; public Character蠅量級(char c){ this.ch = c; } @Override public void display(int x ,int y){ System.out.println("[drawing character: "+this.ch+" at co-ordinates:("+x+","+y+")]"); } }
蠅量級Factory
public class 蠅量級Factory { private static HashMap<character> flyweights = new HashMap(); public static 蠅量級 get蠅量級(char c){ 蠅量級 flyweight = flyweights.getOrDefault(c,null); if(null==flyweight){ flyweight = new Character蠅量級(c); flyweights.put(c,flyweight); } return flyweight; } } </character>
主要
public class Main { public static void main(String args[]){ 蠅量級 flyweight1 = 蠅量級Factory.get蠅量級('a'); 蠅量級 flyweight2 = 蠅量級Factory.get蠅量級('b'); 蠅量級 flyweight3 = 蠅量級Factory.get蠅量級('a');// will use the same object that is referenced by flyweight1 flyweight1.display(1, 2);//'a' displayed at 1,2 flyweight2.display(3, 4);//'b' displayed at 3,4 flyweight3.display(5, 7); // 'a'(shared) displayed at 5,7 } }
輸出:
[drawing character: a at co-ordinates:(1,2)] [drawing character: b at co-ordinates:(3,4)] [drawing character: a at co-ordinates:(5,7)]
重點
- 記憶體效率:透過共享物件來減少記憶體使用,特別是當內在狀態很大或物件很多時。
- 效能改進:減少建立物件的數量,可以提高應用程式在管理大量物件時的效能。
缺點
複雜性:此模式會增加程式碼的複雜性,特別是在分別管理外部和內部狀態時。
開銷:如果要共享的物件很少,享元模式可能會引入不必要的複雜性,而不會顯著節省記憶體。
以上是蠅量級的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本文討論了使用Maven和Gradle進行Java項目管理,構建自動化和依賴性解決方案,以比較其方法和優化策略。

本文使用Maven和Gradle之類的工具討論了具有適當的版本控制和依賴關係管理的自定義Java庫(JAR文件)的創建和使用。

本文討論了使用咖啡因和Guava緩存在Java中實施多層緩存以提高應用程序性能。它涵蓋設置,集成和績效優勢,以及配置和驅逐政策管理最佳PRA

本文討論了使用JPA進行對象相關映射,並具有高級功能,例如緩存和懶惰加載。它涵蓋了設置,實體映射和優化性能的最佳實踐,同時突出潛在的陷阱。[159個字符]

Java的類上載涉及使用帶有引導,擴展程序和應用程序類負載器的分層系統加載,鏈接和初始化類。父代授權模型確保首先加載核心類別,從而影響自定義類LOA


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具

SublimeText3 Linux新版
SublimeText3 Linux最新版

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

Atom編輯器mac版下載
最受歡迎的的開源編輯器