rust 单例模式

张开发
2026/4/18 1:11:11 15 分钟阅读

分享文章

rust 单例模式
最近在学习 rust 想着用rust 实现一个单例 模式单例 是 一种创建型的设计模式它保证一个类只有一个实例并提供一个全局访问点。但是rust 中没有 单例而且所有变量都会检查所有权和生命周期 发现网上很多都是用第三方库实现的这个是我琢磨出来的 一种单例的实现方式欢迎各位大佬指教。话不多说直接放具体代码了详细代码singleton_learn.rs#[derive(Clone, Copy, Debug)]structSing{i1:i32,f1:f32,u1:u32,b1:bool,}pubstructSingleton{str:staticstr,age:i32,sig:Sing,isinit:bool,}pubstaticmutSINGLETON:SingletonSingleton{str:11111,age:55,sig:Sing{i1:1,f1:2.0,u1:3,b1:true,},isinit:false,};implSingleton{pubfnset_str(mutself,str:staticstr){self.strstr;}pubfnset_age(mutself,age:i32){self.ageage;}pubfnset_sig(mutself,sig:Sing){self.sigsig;}pubfnget_str(self)-staticstr{self.str}pubfnget_age(self)-i32{self.age}pubfnget_sig(self)-Sing{self.sig}}pubfnget_singleton()-*mutSingleton{unsafe{letprtrawmutSINGLETON;letprmut*prt;returnprt;}}pubfnget_singleton_ref()-staticmutSingleton{unsafe{letsngrawmutSINGLETON;letsmut*sng;returns;}}#[test]pubfnfn1(){println!(age is {},get_singleton_ref().get_age());get_singleton_ref().set_age(7777777);//get_singleton_ref().get_age();println!(age is {},get_singleton_ref().get_age());unsafe{letsngget_singleton();(*sng).set_str(22222);(*sng).set_age(66);(*sng).set_sig(Sing{i1:4,f1:5.0,u1:6,b1:false,});println!(str is {},(*sng).get_str());println!(age is {},(*sng).get_age());println!(sig is {:#?},(*sng).get_sig());}}main.rs 里的调用fnmain(){design_patterns_learn::singleton_learn::fn1();println!(age is {},design_patterns_learn::singleton_learn::get_singleton_ref().get_age());design_patterns_learn::singleton_learn::get_singleton_ref().set_age(6666666);println!(age2 is {},design_patterns_learn::singleton_learn::get_singleton_ref().get_age());}

更多文章