国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【Java 設(shè)計(jì)模式】結(jié)構(gòu)型之享元模式

這篇具有很好參考價(jià)值的文章主要介紹了【Java 設(shè)計(jì)模式】結(jié)構(gòu)型之享元模式。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。


享元模式(Flyweight Pattern)是一種結(jié)構(gòu)型設(shè)計(jì)模式,它旨在減少對(duì)象的數(shù)量以節(jié)省內(nèi)存和提高性能。享元模式通過共享大量相似對(duì)象的狀態(tài),使得這些對(duì)象可以共享,而不需要在每個(gè)對(duì)象中都存儲(chǔ)相同的數(shù)據(jù)。在本文中,我們將深入研究Java中享元模式的定義、結(jié)構(gòu)、使用場景以及如何在實(shí)際開發(fā)中應(yīng)用。

1. 定義

享元模式是一種結(jié)構(gòu)型設(shè)計(jì)模式,旨在減少對(duì)象的數(shù)量以節(jié)省內(nèi)存和提高性能。享元模式通過共享大量相似對(duì)象的狀態(tài),使得這些對(duì)象可以共享,而不需要在每個(gè)對(duì)象中都存儲(chǔ)相同的數(shù)據(jù)。享元模式通常包含兩個(gè)主要部分:享元接口和具體享元。

  • 享元接口(Flyweight):

    定義了具體享元類需要實(shí)現(xiàn)的接口,通常包含一個(gè)方法用于接受外部狀態(tài)。

  • 具體享元(ConcreteFlyweight):

    實(shí)現(xiàn)了享元接口,并存儲(chǔ)了共享的內(nèi)部狀態(tài)。具體享元對(duì)象的外部狀態(tài)通常通過方法參數(shù)傳遞進(jìn)來。

2. 應(yīng)用場景

享元模式通常在以下場景中使用:

  • 大量相似對(duì)象:

    當(dāng)系統(tǒng)中存在大量相似對(duì)象,且這些對(duì)象可以共享一些相同的狀態(tài)時(shí),可以使用享元模式來減少對(duì)象的數(shù)量。

  • 對(duì)象的內(nèi)部狀態(tài)和外部狀態(tài):

    當(dāng)一個(gè)對(duì)象的內(nèi)部狀態(tài)相對(duì)穩(wěn)定,但外部狀態(tài)需要在運(yùn)行時(shí)變化時(shí),可以使用享元模式。內(nèi)部狀態(tài)存儲(chǔ)在具體享元對(duì)象中,而外部狀態(tài)通過方法參數(shù)傳遞進(jìn)來。

  • 需要緩存的對(duì)象:

    當(dāng)需要緩存對(duì)象以提高性能時(shí),可以使用享元模式。共享的對(duì)象可以被緩存,而不需要重復(fù)創(chuàng)建。

3. 代碼實(shí)現(xiàn)

下面通過一個(gè)簡單的例子來演示享元模式的實(shí)現(xiàn)。假設(shè)有一個(gè)圖書館系統(tǒng),需要管理大量的書籍。我們可以使用享元模式來共享相同作者的書籍對(duì)象。

享元接口 - 書籍 Book

package com.cheney.demo;

interface Book {
    void display(String author);
}

具體享元 - 具體書籍 ConcreteBook

package com.cheney.demo;

class ConcreteBook implements Book {
    private String title;

    public ConcreteBook(String title) {
        this.title = title;
    }

    @Override
    public void display(String author) {
        System.out.println("書名: " + title + ", 作者: " + author);
    }
}

享元工廠 - 書籍工廠 BookFactory

package com.cheney.demo;

import java.util.HashMap;
import java.util.Map;

class BookFactory {
    private Map<String, Book> bookMap = new HashMap<>();

    public Book getBook(String title) {
        Book book = bookMap.get(title);

        if (book == null) {
            book = new ConcreteBook(title);
            bookMap.put(title, book);
        }

        return book;
    }
}

客戶端啟動(dòng)類 Main

package com.cheney.demo;

public class Main {
    public static void main(String[] args) {
        // 使用享元模式創(chuàng)建和顯示書籍
        BookFactory bookFactory = new BookFactory();

        Book book1 = bookFactory.getBook("設(shè)計(jì)模式");
        book1.display("Tom");

        Book book2 = bookFactory.getBook("Java 基礎(chǔ)");
        book2.display("Jack");

        Book book3 = bookFactory.getBook("Spring 實(shí)戰(zhàn)");
        book3.display("Cheney");
    }
}

在上述例子中,Book 是享元接口,定義了具體享元類需要實(shí)現(xiàn)的方法。ConcreteBook 是具體享元,實(shí)現(xiàn)了 Book 接口,并存儲(chǔ)了書籍的標(biāo)題。BookFactory 是享元工廠,負(fù)責(zé)創(chuàng)建和管理具體享元對(duì)象。

在客戶端中,我們使用享元模式創(chuàng)建和顯示書籍。通過共享相同標(biāo)題的書籍對(duì)象,我們可以減少對(duì)象的數(shù)量,提高系統(tǒng)的性能。

結(jié)語

享元模式是一種用于減少對(duì)象數(shù)量、提高系統(tǒng)性能的設(shè)計(jì)模式。通過共享相似對(duì)象的狀態(tài),可以在系統(tǒng)中創(chuàng)建更少的對(duì)象實(shí)例,從而減小內(nèi)存占用和提高運(yùn)行效率。在實(shí)際開發(fā)中,享元模式常被用于管理大量相似對(duì)象,例如緩存、連接池等場景。通過合理使用享元模式,可以提高系統(tǒng)的靈活性、可維護(hù)性,并且降低系統(tǒng)的資源消耗。


【Java 設(shè)計(jì)模式】系列 《23 種設(shè)計(jì)模式》 與 《7 大設(shè)計(jì)原則》 總綱
??設(shè)計(jì)原則
?單一職責(zé)原則(SRP) 規(guī)定一個(gè)類應(yīng)該只有一個(gè)引起變化的原因
?開放/封閉原則(OCP) 表明軟件實(shí)體應(yīng)該是可以擴(kuò)展的,但是不可修改的
?里氏替換原則(LSP) 強(qiáng)調(diào)派生類必須能夠替代其基類而不引起程序錯(cuò)誤
?依賴倒置原則(DIP) 倡導(dǎo)高層模塊不應(yīng)該依賴于低層模塊,二者都應(yīng)該依賴于抽象
?接口隔離原則(ISP) 提倡一個(gè)類不應(yīng)該被強(qiáng)迫依賴它不使用的接口
?合成/聚合復(fù)用原則(CARP) 建議盡量使用合成/聚合,盡量不要使用繼承
?迪米特法則(LoD) 規(guī)定一個(gè)對(duì)象應(yīng)該對(duì)其他對(duì)象有最少的了解

??創(chuàng)建型設(shè)計(jì)模式
?單例模式 保證一個(gè)類僅有一個(gè)實(shí)例,并提供一個(gè)訪問它的全局點(diǎn)
?工廠方法模式 定義一個(gè)用于創(chuàng)建對(duì)象的接口,但是由子類決定實(shí)例化哪一個(gè)類
?抽象工廠模式 提供一個(gè)創(chuàng)建一系列相關(guān)或相互依賴對(duì)象的接口,而無需指定它們具體的類
?建造者模式 將一個(gè)復(fù)雜對(duì)象的構(gòu)建與其表示分離,使得同樣的構(gòu)建過程可以創(chuàng)建不同的表示
?原型模式 通過復(fù)制現(xiàn)有的對(duì)象來創(chuàng)建新對(duì)象,而不是從頭開始創(chuàng)建

??結(jié)構(gòu)型設(shè)計(jì)模式
?適配器模式 將一個(gè)類的接口轉(zhuǎn)換成客戶希望的另外一個(gè)接口
?橋接模式 將抽象部分與它的實(shí)現(xiàn)部分分離,使它們都可以獨(dú)立地變化
?組合模式 將對(duì)象以樹形結(jié)構(gòu)組合以表示“部分-整體”的層次結(jié)構(gòu)
?裝飾器模式 動(dòng)態(tài)地給一個(gè)對(duì)象添加一些額外的職責(zé)
?外觀模式 為子系統(tǒng)中的一組接口提供一個(gè)一致的界面
?代理模式 為其他對(duì)象提供一種代理以控制對(duì)這個(gè)對(duì)象的訪問
?享元模式 用共享的方式高效地支持大量小粒度對(duì)象

??行為型設(shè)計(jì)模式
?觀察者模式 定義對(duì)象間的一對(duì)多依賴,當(dāng)一個(gè)對(duì)象改變狀態(tài),所有依賴者都會(huì)受到通知并自動(dòng)更新
?策略模式 定義一系列算法,將它們封裝起來,并且使它們可以相互替換
?命令模式 將請(qǐng)求封裝成對(duì)象,使得可以用不同的請(qǐng)求對(duì)客戶進(jìn)行參數(shù)化
?狀態(tài)模式 允許對(duì)象在其內(nèi)部狀態(tài)改變時(shí)改變它的行為
?責(zé)任鏈模式 為解除請(qǐng)求的發(fā)送者和接收者之間的耦合,而使多個(gè)對(duì)象都有機(jī)會(huì)處理這個(gè)請(qǐng)求
?訪問者模式 將算法與對(duì)象結(jié)構(gòu)分離,并且可以在不改變對(duì)象結(jié)構(gòu)的前提下定義新的操作
?中介者模式 用一個(gè)中介對(duì)象來封裝一系列的對(duì)象交互
?備忘錄模式 在不破壞封裝的情況下,捕獲對(duì)象的內(nèi)部狀態(tài),并在對(duì)象之外保存這個(gè)狀態(tài)
?迭代器模式 提供一種方法順序訪問一個(gè)聚合對(duì)象中的各個(gè)元素,而不暴露其內(nèi)部表示
?模版方法模式 定義一個(gè)操作中的算法的骨架,將一些步驟延遲到子類中
?解釋器模式 定義一個(gè)語言的文法,并且建立一個(gè)解釋器來解釋該語言中的句子

文章來源地址http://www.zghlxwxcb.cn/news/detail-814029.html

到了這里,關(guān)于【Java 設(shè)計(jì)模式】結(jié)構(gòu)型之享元模式的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Java學(xué)習(xí)——設(shè)計(jì)模式——結(jié)構(gòu)型模式2

    Java學(xué)習(xí)——設(shè)計(jì)模式——結(jié)構(gòu)型模式2

    結(jié)構(gòu)型模式主要涉及如何組合各種對(duì)象以便獲得更好、更靈活的結(jié)構(gòu)。雖然面向?qū)ο蟮睦^承機(jī)制提供了最基本的子類擴(kuò)展父類的功能,但結(jié)構(gòu)型模式不僅僅簡單地使用繼承,而更多地通過組合與運(yùn)行期的動(dòng)態(tài)組合來實(shí)現(xiàn)更靈活的功能。 包括: 1、適配器 2、橋接 3、組合 4、裝

    2024年02月03日
    瀏覽(27)
  • 【Java 設(shè)計(jì)模式】結(jié)構(gòu)型之代理模式

    代理模式(Proxy Pattern)是一種結(jié)構(gòu)型設(shè)計(jì)模式, 它允許通過一個(gè)代理對(duì)象控制對(duì)其他對(duì)象的訪問 。代理模式在訪問對(duì)象時(shí)引入了一定程度的間接性,使得可以在訪問對(duì)象前后進(jìn)行一些額外的操作。在本文中,我們將深入研究Java中代理模式的定義、結(jié)構(gòu)、使用場景以及如何在

    2024年01月21日
    瀏覽(23)
  • 【Java 設(shè)計(jì)模式】結(jié)構(gòu)型之橋接模式

    【Java 設(shè)計(jì)模式】結(jié)構(gòu)型之橋接模式

    橋接模式(Bridge Pattern)是一種結(jié)構(gòu)型設(shè)計(jì)模式, 它將抽象部分與實(shí)現(xiàn)部分分離,使它們可以獨(dú)立變化,從而降低它們之間的耦合 。橋接模式通過將抽象部分和實(shí)現(xiàn)部分分離,使得它們可以獨(dú)立地變化,同時(shí)在它們之間建立一個(gè)橋梁。在本文中,我們將介紹 Java 中橋接模式的

    2024年01月19日
    瀏覽(21)
  • 【十】設(shè)計(jì)模式~~~結(jié)構(gòu)型模式~~~享元模式(Java)

    【十】設(shè)計(jì)模式~~~結(jié)構(gòu)型模式~~~享元模式(Java)

    【學(xué)習(xí)難度:★★★★☆,使用頻率:★☆☆☆☆】 ????????面向?qū)ο蠹夹g(shù)可以很好地解決一些靈活性或可擴(kuò)展性問題,但在很多情況下需要在系統(tǒng)中增加類和對(duì)象的個(gè)數(shù)。當(dāng)對(duì)象數(shù)量太多時(shí),將導(dǎo)致運(yùn)行代價(jià)過高,帶來性能下降等問題。 享元模式正是為解決這一類問題

    2024年02月08日
    瀏覽(25)
  • Java設(shè)計(jì)模式-結(jié)構(gòu)型-適配器模式

    Java設(shè)計(jì)模式-結(jié)構(gòu)型-適配器模式

    ? 與電源適配器相似,在適配器模式中引入了一個(gè)被稱為適配器(Adapter)的包裝類,而它所包裝的對(duì)象稱為適配者(Adaptee),即被適配的類。適配器的實(shí)現(xiàn)就是把客戶類的請(qǐng)求轉(zhuǎn)化為對(duì)適配者的相應(yīng)接口的調(diào)用。也就是說:當(dāng)客戶類調(diào)用適配器的方法時(shí),在適配器類的內(nèi)部將調(diào)用

    2024年02月20日
    瀏覽(30)
  • Java23種設(shè)計(jì)模式-結(jié)構(gòu)型模式之組合模式

    組合模式 (Composite Pattern):將 對(duì)象組合成樹狀結(jié)構(gòu) 以表示“ 部分-整體 ”層次結(jié)構(gòu),同時(shí)保持對(duì)單個(gè)對(duì)象和組合對(duì)象的一致性操作,主要目的是簡化客戶端代碼,因?yàn)樗梢越y(tǒng)一處理單個(gè)對(duì)象和組合對(duì)象。 通常包含以下幾個(gè)角色: 角色1. 抽象組件 (Component):聲明了 組

    2024年04月26日
    瀏覽(29)
  • 【Java 設(shè)計(jì)模式】結(jié)構(gòu)型之適配器模式

    【Java 設(shè)計(jì)模式】結(jié)構(gòu)型之適配器模式

    適配器模式(Adapter Pattern)是一種結(jié)構(gòu)型設(shè)計(jì)模式, 用于將一個(gè)類的接口轉(zhuǎn)換成客戶端期望的另一個(gè)接口 。這種模式使得原本由于接口不兼容而不能一起工作的類可以一起工作。在本文中,我們將介紹 Java 中適配器模式的定義、結(jié)構(gòu)、使用場景以及如何在實(shí)際開發(fā)中應(yīng)用。

    2024年01月19日
    瀏覽(25)
  • Java設(shè)計(jì)模式之結(jié)構(gòu)型-橋接模式(UML類圖+案例分析)

    Java設(shè)計(jì)模式之結(jié)構(gòu)型-橋接模式(UML類圖+案例分析)

    目錄 一、基礎(chǔ)概念 二、UML類圖 三、角色設(shè)計(jì) 四、案例分析 4.1、支付方式 4.2、支付渠道? 五、總結(jié) 橋接模式(Bridge Pattern)是一種結(jié)構(gòu)型設(shè)計(jì)模式,其主要目的是“將抽象部分與實(shí)現(xiàn)部分分離,使它們都可以獨(dú)立地變化”。 橋接模式的核心思想是把抽象(abstraction)與實(shí)現(xiàn)

    2024年02月13日
    瀏覽(22)
  • Java設(shè)計(jì)模式之結(jié)構(gòu)型-組合模式(UML類圖+案例分析)

    Java設(shè)計(jì)模式之結(jié)構(gòu)型-組合模式(UML類圖+案例分析)

    目錄 一、基礎(chǔ)概念 二、UML類圖 三、角色設(shè)計(jì) 四、案例分析 4.1、基本實(shí)現(xiàn) 4.2、菜單遍歷? 五、總結(jié)? 組合模式(Composite Pattern)又叫部分-整體模式,它通過將對(duì)象組合成樹形結(jié)構(gòu)來表示“整體-部分”的層次關(guān)系,允許用戶統(tǒng)一單個(gè)對(duì)象和組合對(duì)象的處理邏輯。 角色 描述

    2024年02月16日
    瀏覽(25)
  • Java設(shè)計(jì)模式之結(jié)構(gòu)型-享元模式(UML類圖+案例分析)

    Java設(shè)計(jì)模式之結(jié)構(gòu)型-享元模式(UML類圖+案例分析)

    目錄 一、基本概念 二、UML類圖 三、角色設(shè)計(jì) 四、案例分析 4.1、基本實(shí)現(xiàn) 4.2、游戲角色 五、總結(jié) 享元模式是一種結(jié)構(gòu)型設(shè)計(jì)模式,主要用于減少創(chuàng)建大量相似對(duì)象所占用的內(nèi)存,它通過共享技術(shù)來有效支持大量細(xì)粒度的對(duì)象。 角色 描述 抽象享元角色 定義出對(duì)象的外部狀

    2024年02月16日
    瀏覽(26)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包