最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java設(shè)計模式之享元模式(Flyweight Pattern)詳解

 更新時間:2023年07月07日 11:04:05   作者:小威要向諸佬學習呀  
享元模式(Flyweight Pattern)是一種結(jié)構(gòu)型設(shè)計模式,旨在減少對象的數(shù)量,以節(jié)省內(nèi)存空間和提高性能,本文將詳細的給大家介紹一下Java享元模式,需要的朋友可以參考下

享元模式概念

享元模式(Flyweight Pattern)是一種結(jié)構(gòu)型設(shè)計模式,旨在減少對象的數(shù)量,以節(jié)省內(nèi)存空間和提高性能。它通過共享相同或相似狀態(tài)的多個對象來減少對象的數(shù)量。享元模式通常用于大量創(chuàng)建細粒度對象的場景。

享元模式使用場景

在享元模式中,我們創(chuàng)建一個工廠類(Flyweight Factory),該工廠類對外提供獲取享元對象的方法。享元對象包含兩部分屬性:內(nèi)部狀態(tài)(Intrinsic State)和外部狀態(tài)(Extrinsic State)。內(nèi)部狀態(tài)指不隨外界環(huán)境改變而改變的共享部分,外部狀態(tài)指隨著環(huán)境的改變而改變的部分。

當客戶端需要一個享元對象時,它向工廠類請求一個對象,工廠類會首先查詢對象池中是否已經(jīng)有該對象的實例。如果有,就直接返回對象池中的實例;如果沒有,則創(chuàng)建一個新的實例并將其放入對象池中,同時返回給客戶端。

享元模式優(yōu)缺點

享元模式的優(yōu)點在于,它可以大大減少系統(tǒng)中對象的數(shù)量,從而提高系統(tǒng)的性能和內(nèi)存利用率。它也可以使得代碼更加簡潔,易于維護和擴展。

但是,享元模式也有一些缺點,在某些情況下,它可能會犧牲部分內(nèi)存以換取性能的提升。同時,由于享元對象通常是不可變的對象,因此可能會對系統(tǒng)中的某些業(yè)務(wù)邏輯造成影響。

享元模式代碼案例

下面以一個具體例子,比如制作黑白棋游戲來進一步說明:

對于黑白棋這個游戲來說,我們需要大量的棋子對象,如果為每一個棋子都單獨創(chuàng)建一個對象,那么系統(tǒng)的性能和內(nèi)存開銷都會非常大。而使用享元模式,我們可以將一些相同的棋子對象共享起來,只需要保存其內(nèi)部和外部狀態(tài)區(qū)分即可。例如,黑方和白方用不同顏色的棋子,但同一顏色的棋子之間是可以互相替換的。

定義棋子類Piece

public interface Piece {
    void put(int x, int y);
}
public class BlackPiece implements Piece {
    @Override
    public void put(int x, int y) {
        System.out.println("在坐標 (" + x + ", " + y + ") 放置了一個黑棋子");
    }
}
public class WhitePiece implements Piece {
    @Override
    public void put(int x, int y) {
        System.out.println("在坐標 (" + x + ", " + y + ") 放置了一個白棋子");
    }
}

以上代碼實現(xiàn)了兩個具體的棋子類:BlackPiece 和 WhitePiece。它們都實現(xiàn)了 Piece 接口,并重寫了其中的 put() 方法,用于在指定坐標放棋子。

實現(xiàn)享元工廠類PieceFactory

import java.util.HashMap;
import java.util.Map;
public class PieceFactory {
    private final Map<String, Piece> map = new HashMap<>();
    public Piece getPiece(String color) {
        Piece piece = map.get(color);
        if (piece == null) {
            switch (color) {
                case "black":
                    piece = new BlackPiece();
                    break;
                case "white":
                    piece = new WhitePiece();
                    break;
                default:
                    throw new IllegalArgumentException("Unsupported color: " + color);
            }
            map.put(color, piece);
        }
        return piece;
    }
}

以上代碼實現(xiàn)了一個操作棋子對象的共享工廠PieceFactory,其中使用了HashMap來保存已經(jīng)創(chuàng)建過的棋子對象。直接調(diào)用getPiece()方法即可根據(jù)顏色獲取相應(yīng)的棋子對象。如果該顏色的棋子對象不存在,則創(chuàng)建一個新的棋子對象并存入map中,否則直接從map中獲取棋子對象。

在客戶端中使用享元模式

public class Client {
    public static void main(String[] args) {
        PieceFactory factory = new PieceFactory();
        Piece black1 = factory.getPiece("black");
        black1.put(1, 1);
        Piece black2 = factory.getPiece("black");
        black2.put(2, 2);
        Piece white1 = factory.getPiece("white");
        white1.put(3, 3);
        Piece white2 = factory.getPiece("white");
        white2.put(4, 4);
    }
}

在上面的代碼中,我們可以看到一個完整的享元模式實現(xiàn)。在客戶端中,我們只需要獲取工廠類中提供的共享對象即可,通過調(diào)用 put() 方法來為棋子設(shè)置坐標。

通過以上例子,我們可以看出享元模式的優(yōu)點:它大幅度減少內(nèi)存占用并提高了系統(tǒng)性能,對于類似的大量重復對象的場景非常友好。

到此這篇關(guān)于Java設(shè)計模式之享元模式(Flyweight Pattern)詳解的文章就介紹到這了,更多相關(guān)Java 享元模式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 線程池ThreadPoolExecutor使用簡介與方法實例

    線程池ThreadPoolExecutor使用簡介與方法實例

    今天小編就為大家分享一篇關(guān)于線程池ThreadPoolExecutor使用簡介與方法實例,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • Java中的邏輯結(jié)構(gòu)詳解

    Java中的邏輯結(jié)構(gòu)詳解

    這篇文章主要介紹了Java中的邏輯結(jié)構(gòu)詳解,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-04-04
  • nacos-discovery包名層級問題解決

    nacos-discovery包名層級問題解決

    這篇文章主要為大家介紹了nacos-discovery包名層級問題解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-07-07
  • Java中Integer128的坑

    Java中Integer128的坑

    本文主要介紹了Java中Integer128的坑,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2025-03-03
  • Java多線程工具CompletableFuture詳解

    Java多線程工具CompletableFuture詳解

    這篇文章主要介紹了Java多線程工具CompletableFuture詳解,CompletableFuture?是?java?1.8?追加的新特性,通俗的話來說,是一個函數(shù)式的,用于控制多任務(wù)同步、異步組合操作的工具,需要的朋友可以參考下
    2024-01-01
  • 淺析JDK和Tomcat的安裝與配置方法

    淺析JDK和Tomcat的安裝與配置方法

    這篇文章主要介紹了JDK和Tomcat的安裝與配置方法,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友參考下吧
    2018-12-12
  • SpringMvc響應(yīng)數(shù)據(jù)及結(jié)果視圖實現(xiàn)代碼

    SpringMvc響應(yīng)數(shù)據(jù)及結(jié)果視圖實現(xiàn)代碼

    這篇文章主要介紹了SpringMvc響應(yīng)數(shù)據(jù)及結(jié)果視圖實現(xiàn)代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-08-08
  • Springboot?jpa使用sum()函數(shù)返回結(jié)果如何被接收

    Springboot?jpa使用sum()函數(shù)返回結(jié)果如何被接收

    這篇文章主要介紹了Springboot?jpa使用sum()函數(shù)返回結(jié)果如何接收,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • Java中增強for循環(huán)代碼示例

    Java中增強for循環(huán)代碼示例

    這篇文章主要給大家介紹了Java中增強for循環(huán)的相關(guān)資料,for/in循環(huán)就是JDK5.0中所謂的增強For循環(huán),它能對數(shù)組和集合進行遍歷,使用它會使用你的代碼短小而精煉的多,需要的朋友可以參考下
    2023-10-10
  • java實現(xiàn)dijkstra最短路徑尋路算法

    java實現(xiàn)dijkstra最短路徑尋路算法

    這篇文章主要為大家詳細介紹了java實現(xiàn)dijkstra最短路徑尋路算法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-01-01

最新評論

虹口区| 武冈市| 喀什市| 昆明市| 灵寿县| 大荔县| 酒泉市| 万州区| 平乡县| 东方市| 平定县| 武定县| 武安市| 和静县| 漯河市| 安平县| 门源| 余庆县| 闽清县| 灌云县| 台江县| 永安市| 青冈县| 开化县| 黑龙江省| 万荣县| 台前县| 南城县| 新营市| 道孚县| 泌阳县| 淮阳县| 灵宝市| 曲阳县| 浦县| 双牌县| 上饶市| 深泽县| 桂林市| 河北省| 富顺县|