亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么使用Java享元設計模式優化對象創建提高性能和效率

發布時間:2023-05-06 09:58:07 來源:億速云 閱讀:247 作者:iii 欄目:開發技術

這篇“怎么使用Java享元設計模式優化對象創建提高性能和效率”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“怎么使用Java享元設計模式優化對象創建提高性能和效率”文章吧。

介紹

Java中的享元模式(Flyweight Pattern)是一種結構型設計模式,旨在通過共享盡可能多的對象來減少內存占用和提高性能.

Java享元模式通常包含以下4種角色

  • 享元工廠(Flyweight Factory):負責創建和管理享元對象.

  • 具體享元(Concrete Flyweight):實現享元接口并存儲與共享狀態相關的內部狀態.

  • 抽象享元(Flyweight):定義享元對象需要實現的接口或抽象類.

  • 非共享狀態(Unshared State):儲存享元對象的非共享狀態.

注意:抽象享元和非共享狀態角色是可選的,可以省略它們將其功能合并到其他角色中

當客戶端請求創建或訪問一個享元對象時,享元工廠會檢查是否已經創建了該對象.如果已經創建,則返回現有對象的引用;如果尚未創建,則創建新的對象并返回其引用.這樣客戶端可以共享現有對象,而不必創建新的對象,從而減少內存占用和提高性能.

實現

以電商中的商品信息為例,在電商中,每個商品都有一個名稱,價格,庫存等屬性.通常情況下,每個商品都需要單獨創建一個對象,這樣會導致內存占用增加,而且如果多次購買相同的商品,系統會創建多個相同的對象,浪費資源.

抽象享元

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);
    }
}

怎么使用Java享元設計模式優化對象創建提高性能和效率

在上面示例代碼中,首先創建一個商品接口Product,其中包含了商品的名稱,價格,庫存等屬性.然后創建具體的商品類ConcreteProduct,實現Product接口,并定義共享的內部狀態name,price,和stock.接下來我們創建商品工廠ProductFactory,用于創建和管理共享的商品對象,在這個工廠中,我們使用HashMap來儲存共享的商品對象,每當客戶端需要購買一個商品時,我們先檢查是否已經創建了該商品對象,如果已經創建,則返回現有對象的引用,如果未創建,則創建新的對象儲存到HashMap并返回其引用.

總結

優點

  • 減少對象的創建,節省內存空間,提高系統性能.

  • 通過共享對象,可以使得系統中的相同對象在內存中只存在一份,從而減少內存的開銷.

  • 提高系統的可擴展性,如果需要增加新的對象,只需要在工廠中創建即可,不需要修改原有代碼.

  • 提高系統的安全性,共享對象是只讀的,不會被修改.

缺點

  • 可能會使得系統變得過于復雜,增加了代碼的復雜性.

  • 需要額外的工作來維護共享對象的一致性,比如需要考慮線程安全等問題.

  • 可能會因為共享對象的存在而降低程序的靈活性,比如無法對共享對象進行個性化設置.

應用場景

  • 當系統中存在大量相同或相似的對象時,可以考慮使用享元模式來減少內存開銷.

  • 當需要緩存對象并且可以復用時,也可以考慮使用享元模式.

  • 在多線程環境下,可以使用享元模式來實現對象的共享,提高程序的并發性能.

  • 在游戲開發中,可以使用享元模式來管理游戲中的角色等對象.

以上就是關于“怎么使用Java享元設計模式優化對象創建提高性能和效率”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

二手房| 酒泉市| 枣强县| 赫章县| 萝北县| 深水埗区| 焦作市| 齐河县| 晋宁县| 华蓥市| 陕西省| 嘉黎县| 柳河县| 关岭| 沭阳县| 四平市| 余姚市| 永定县| 浏阳市| 安溪县| 华容县| 靖远县| 蒙阴县| 云南省| 梧州市| 德化县| 全南县| 陆丰市| 井陉县| 土默特左旗| 中江县| 琼中| 伊宁市| 得荣县| 南郑县| 宜章县| 清丰县| 闸北区| 平潭县| 原平市| 印江|