<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
Java中的享元模式(Flyweight Pattern)是一種結構型設計模式,旨在通過共用盡可能多的物件來減少記憶體佔用和提高效能.
Java享元模式通常包含以下4種角色
注意:抽象享元和非共用狀態角色是可選的,可以省略它們將其功能合併到其他角色中
當用戶端請求建立或存取一個享元物件時,享元工廠會檢查是否已經建立了該物件.如果已經建立,則返回現有物件的參照;如果尚未建立,則建立新的物件並返回其參照.這樣使用者端可以共用現有物件,而不必建立新的物件,從而減少記憶體佔用和提高效能.
以電商中的商品資訊為例,在電商中,每個商品都有一個名稱,價格,庫存等屬性.通常情況下,每個商品都需要單獨建立一個物件,這樣會導致記憶體佔用增加,而且如果多次購買相同的商品,系統會建立多個相同的物件,浪費資源.
抽象享元
public interface Product { String getName(); double getPrice(); int getStock(); }
具體享元
public class ConcreteProduct implements Product{ private String name; private double price; private int stock; public ConcreteProduct(String name, double price, int stock) { this.name = name; this.price = price; this.stock = stock; } @Override public String getName() { return name; } @Override public double getPrice() { return price; } @Override public int getStock() { return stock; } }
享元工廠
public class ProductFactory { private static Map<String, Product> productMap = new HashMap<>(); public static Product getProduct(String name, double price, int stock) { String key = name + "_" + price; Product res = productMap.get(key); if (Objects.isNull(res)) { // 如果快取池內不存在,就建立新物件放置到快取池 res = new ConcreteProduct(name, price, stock); productMap.put(key, res); } return res; } }
測試
public class Demo { public static void main(String[] args) { Product p1 = ProductFactory.getProduct("iPhone 14 Plus", 8899, 1); Product p2 = ProductFactory.getProduct("iPhone 14 Plus", 8899, 1); System.out.println(p1 == p2); } }
在上面範例程式碼中,首先建立一個商品介面Product,其中包含了商品的名稱,價格,庫存等屬性.然後建立具體的商品類ConcreteProduct,實現Product介面,並定義共用的內部狀態name,price,和stock.接下來我們建立商品工廠ProductFactory,用於建立和管理共用的商品物件,在這個工廠中,我們使用HashMap來儲存共用的商品物件,每當使用者端需要購買一個商品時,我們先檢查是否已經建立了該商品物件,如果已經建立,則返回現有物件的參照,如果未建立,則建立新的物件儲存到HashMap並返回其參照.
到此這篇關於Java享元設計模式優化物件建立提高效能和效率的文章就介紹到這了,更多相關Java享元設計模式內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45