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

用Rust實現(xiàn)23種設(shè)計模式之單例

這篇具有很好參考價值的文章主要介紹了用Rust實現(xiàn)23種設(shè)計模式之單例。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

話不多說,上代碼!

1. 使用Arc + Mutex

在這個例子中,我們使用了 Arc (原子引用計數(shù))和 Mutex (互斥鎖)來實現(xiàn)線程安全的單例。通過 get_instance 方法,我們可以獲取到單例實例,并對實例進行操作。

use std::sync::{Arc, Mutex};
 struct Singleton {
    // 單例數(shù)據(jù)
    data: String,
}
 impl Singleton {
    // 獲取單例實例的方法
    fn get_instance() -> Arc<Mutex<Singleton>> {
        // 使用懶加載創(chuàng)建單例實例
        // 這里使用了 Arc 和 Mutex 來實現(xiàn)線程安全的單例
        // 只有第一次調(diào)用 get_instance 時會創(chuàng)建實例,之后都會返回已創(chuàng)建的實例
        static mut INSTANCE: Option<Arc<Mutex<Singleton>>> = None;
         unsafe {
            INSTANCE.get_or_insert_with(|| {
                Arc::new(Mutex::new(Singleton {
                    data: String::from("Singleton instance"),
                }))
            }).clone()
        }
    }
}
 fn main() {
    // 獲取單例實例
    let instance1 = Singleton::get_instance();
    let instance2 = Singleton::get_instance();
     // 修改單例數(shù)據(jù)
    {
        let mut instance = instance1.lock().unwrap();
        instance.data = String::from("Modified singleton instance");
    }
     // 輸出單例數(shù)據(jù)
    {
        let instance = instance2.lock().unwrap();
        println!("{}", instance.data);
    }
}

2. 使用lazy_static的懶加載

使用 lazy_static crate: lazy_static crate 是一個常用的 Rust crate,可以實現(xiàn)懶加載的全局靜態(tài)變量。通過 lazy_static ,可以在需要時創(chuàng)建單例實例,并確保只有一個實例被創(chuàng)建

use lazy_static::lazy_static;
   use std::sync::Mutex;
    struct Singleton {
       // 單例數(shù)據(jù)
       data: String,
   }
    lazy_static! {
       static ref INSTANCE: Mutex<Singleton> = Mutex::new(Singleton {
           data: String::from("Singleton instance"),
       });
   }
    fn main() {
       // 獲取單例實例
       let instance = INSTANCE.lock().unwrap();
       println!("{}", instance.data);
   }

3. 使用once_cell crate

使用 once_cell crate: once_cell crate 是另一個常用的 Rust crate,可以實現(xiàn)懶加載的全局靜態(tài)變量。通過 once_cell ,可以在首次訪問時創(chuàng)建單例實例,并確保只有一個實例被創(chuàng)建

use once_cell::sync::Lazy;
    struct Singleton {
       // 單例數(shù)據(jù)
       data: String,
   }
    static INSTANCE: Lazy<Singleton> = Lazy::new(|| Singleton {
       data: String::from("Singleton instance"),
   });
    fn main() {
       // 獲取單例實例
       let instance = INSTANCE.clone();
       println!("{}", instance.data);
   }

4. 使用 Rc 和 RefCell

使用 Rc 和 RefCell : Rc 是 Rust 標準庫中的引用計數(shù)類型, RefCell 是一個提供內(nèi)部可變性的類型。結(jié)合使用 Rc 和 RefCell ,可以實現(xiàn)簡單的單例模式。示例代碼如下:文章來源地址http://www.zghlxwxcb.cn/news/detail-633821.html

use std::rc::Rc;
   use std::cell::RefCell;
    struct Singleton {
       // 單例數(shù)據(jù)
       data: String,
   }
    fn main() {
       // 創(chuàng)建單例實例
       let instance = Rc::new(RefCell::new(Singleton {
           data: String::from("Singleton instance"),
       }));
        // 獲取單例實例
       let borrowed_instance = instance.borrow();
       println!("{}", borrowed_instance.data);
   }	

到了這里,關(guān)于用Rust實現(xiàn)23種設(shè)計模式之單例的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • C#設(shè)計模式之單例模式

    單例模式(Singleton)保證一個類僅有一個實例,并提供一個訪問它的全局訪問點。 單例模式的結(jié)構(gòu)圖如下所示: 對一些類來說,只有一個實例是很重要的。如何才能保證一個類只有一個實例并且這個實例易于被訪問呢? 基于程序員之間的約定或是利用全局變量嗎? 雖然這樣

    2024年02月03日
    瀏覽(23)
  • Java設(shè)計模式之單例模式

    Java設(shè)計模式之單例模式

    定義:保證一個類僅有一個實例,并提供一個全局訪問點 類型:創(chuàng)建型 想確保任何情況下都絕對只有一個實例 例如:線程池,數(shù)據(jù)庫連接池一般都為單例模式 單例模式優(yōu)點 在內(nèi)存中只有一個實例,減少內(nèi)存開銷 可以避免對資源的多重占用 設(shè)置全局訪問點,嚴格控制訪問

    2024年02月02日
    瀏覽(56)
  • 設(shè)計模式之單例模式(懶漢, 餓漢)

    設(shè)計模式之單例模式(懶漢, 餓漢)

    單例模式是一種常用的軟件設(shè)計模式, 該模式的主要目的是確保某一個類在內(nèi)存中只能有一個實例對象, 通過單例模式的方法創(chuàng)建的類在當(dāng)前進程中只有一個實例對象. 常見的單例模式有兩種: 餓漢式, 這里的 “餓” 意義表述不夠清晰, 用 “急” 來表述意義更加容易聯(lián)想一些

    2024年02月22日
    瀏覽(20)
  • C#--設(shè)計模式之單例模式

    C#--設(shè)計模式之單例模式

    單例模式大概是所有設(shè)計模式中最簡單的一種,如果在面試時被問及熟悉哪些設(shè)計模式,你可能第一個答的就是單例模式。 單例模式的實現(xiàn)分為兩種: 餓漢式:在靜態(tài)構(gòu)造函數(shù)執(zhí)行時就立即實例化。 懶漢式:在程序執(zhí)行過程中第一次需要時再實例化。 兩者有各自適用的場景

    2024年02月14日
    瀏覽(12)
  • c++設(shè)計模式之單例模式

    一個類無論創(chuàng)建多少對象 , 都只能得到一個實例 如上述代碼中,我們通過new運算符創(chuàng)建出了類A的三個對象實例,而我們現(xiàn)在要做的是,如何設(shè)計類A,使得上述代碼運行之后永遠只產(chǎn)生同一個對象實例 ????????我們知道,一個類對象是通過這個類的構(gòu)造函數(shù)創(chuàng)建的,因此

    2024年01月19日
    瀏覽(26)
  • 淺談設(shè)計模式之單例模式

    淺談設(shè)計模式之單例模式

    單例模式屬于創(chuàng)建型模式,它提供了一種創(chuàng)建對象的最佳方式。單例模式指的是 單一的一個類 ,該類負責(zé)創(chuàng)建自己的對象,并且保證該 對象唯一 。該類提供了一種訪問其唯一對象的方法,外部需要調(diào)用該類的對象可以通過方法獲取,不需要實例化類的對象。 關(guān)鍵點: 單例

    2024年02月16日
    瀏覽(21)
  • Unity設(shè)計模式之單例模式

    單例模式(Singleton)是設(shè)計模式中很常見的一種設(shè)計模式,目的是為了讓一個類在程序運行期間有且僅有一個實例,且方便全局訪問。 1、私有的構(gòu)造函數(shù)。 2、含有一個該類的靜態(tài)私有對象。 3、靜態(tài)的公有函數(shù)或?qū)傩裕奖阌脩魟?chuàng)建或者獲取它本身的靜態(tài)私有對象。 當(dāng)項目

    2023年04月09日
    瀏覽(24)
  • 萬字解析設(shè)計模式之單例模式

    萬字解析設(shè)計模式之單例模式

    單例模式(Singleton Pattern)是 Java 中最簡單的設(shè)計模式之一。這種類型的設(shè)計模式屬于創(chuàng)建型模式,它提供了一種創(chuàng)建對象的最佳方式。 這種模式涉及到一個 單一 的類,該類負責(zé)創(chuàng)建自己的對象,同時確保 只有單個對象被創(chuàng)建 。這個類提供了一種訪問其唯一的對象的方式,

    2024年02月08日
    瀏覽(28)
  • C++設(shè)計模式創(chuàng)建型之單例模式

    一、概述 ? ? ? ? 單例模式也稱單態(tài)模式,是一種創(chuàng)建型模式,用于創(chuàng)建只能產(chǎn)生一個對象實例的類。例如,項目中只存在一個聲音管理系統(tǒng)、一個配置系統(tǒng)、一個文件管理系統(tǒng)、一個日志系統(tǒng)等,甚至如果吧整個Windows操作系統(tǒng)看成一個項目,那么其中只存在一個任務(wù)管理

    2024年02月14日
    瀏覽(29)
  • 深入理解設(shè)計模式-創(chuàng)建型之單例模式

    如果有些數(shù)據(jù)在系統(tǒng)中應(yīng)該且只能保存一份,那就應(yīng)該設(shè)計為單例類。 如:配置類:在系統(tǒng)中,我們只有一個配置文件,當(dāng)配置文件被加載到內(nèi)存之后,應(yīng)該被映射為一個唯一的【配置實例】,此時就可以使用單例,當(dāng)然也可以不用。 全局計數(shù)器:我們使用一個全局的計數(shù)

    2024年02月12日
    瀏覽(24)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包