族谱网 头条 人物百科

单例模式

2020-10-16
出处:族谱网
作者:阿族小谱
浏览:492
转发:0
评论:0
构建方式通常单例模式在Java语言中,有两种构建方式:懒汉方式。指全局的单例实例在第一次被使用时构建。饿汉方式。指全局的单例实例在类装载时构建。例子在Java语言中,单例模式(饿汉模式)应用的例子如下述代码所示:publicclassSingleton{privatefinalstaticSingletonINSTANCE=newSingleton();//PrivateconstructorsuppressesprivateSingleton(){}//defaultpublicconstructorpublicstaticSingletongetInstance(){returnINSTANCE;}}在Java编程语言中,单例模式(懒汉模式)应用的例子如下述代码所示(此种方法只能用在JDK5及以后版本(注意INSTANCE被声明为volatile),之前的版本使用“双重检查锁”会发生非...

构建方式

通常单例模式在Java语言中,有两种构建方式:

懒汉方式。指全局的单例实例在第一次被使用时构建。

饿汉方式。指全局的单例实例在类装载时构建。

例子

在Java语言中,单例模式(饿汉模式)应用的例子如下述代码所示:

publicclassSingleton{privatefinalstaticSingletonINSTANCE=newSingleton();// Private constructor suppresses privateSingleton(){}// default public constructorpublicstaticSingletongetInstance(){returnINSTANCE;}}

在Java编程语言中,单例模式(懒汉模式)应用的例子如下述代码所示 (此种方法只能用在JDK5及以后版本(注意 INSTANCE 被声明为 volatile),之前的版本使用“双重检查锁”会发生非预期行为 ):

publicclassSingleton{privatestaticvolatileSingletonINSTANCE=null;// Private constructor suppresses // default public constructorprivateSingleton(){}//thread safe and performance promote publicstaticSingletongetInstance(){if(INSTANCE==null){synchronized(Singleton.class){//when more than two threads run into the first null check same time, to avoid instanced more than one time, it needs to be checked again.if(INSTANCE==null){INSTANCE=newSingleton();}}}returnINSTANCE;}}

在C++编程语言中,单例模式应用的例子如下述代码所示(这里仅仅提供一个示例,这个例子对多线程的情况并不是安全的):

// ...classlock{public:lock();lock(lockconst&l);~lock();lock&operator=(lockconst&l);voidrequest();voidrelease();// ...};lock::lock(){// ...}// ...lock::~lock(){// ...}// ...voidlock::request(){// ...}voidlock::release(){// ...}// ...// assumes _DATA_TYPE_ has a default constructortemplateclasssingleton{public:static_DATA_TYPE_*request();staticvoidrelease();private:singleton();singleton(singletonconst&s);~singleton();singleton&operator=(singletonconst&s);static_DATA_TYPE_*pointer;staticlockmutex;// ...};template_DATA_TYPE_*singleton::pointer=0;templatelocksingleton::mutex;template_DATA_TYPE_*singleton::request(){if(singleton::pointer==0){singleton::mutex.request();if(singleton::pointer==0){singleton::pointer=new_DATA_TYPE_;}singleton::mutex.release();}returnsingleton::pointer;}templatevoidsingleton::release(){if(singleton::pointer!=0){singleton::mutex.request();if(singleton::pointer!=0){deletesingleton::pointer;singleton::pointer=0;}singleton::mutex.release();}}templatesingleton::singleton(){// ...}// ...intmain(){int*s;s=singleton::request();// ...singleton::release();return0;}

GO语言中的单例模式:

var_instance*servicetypeservicestruct{Namestring}funcService()*service{if_instance==nil{_instance=new(service)}return_instance}func(this*service)Startup(){}func(this*service)Stop(){}func(this*service)Restart(){}

OC语言中的单例模式:

@interfaceControl : NSObject+(id)getShare;@endstaticControl*mControl;@implementationControl+(id)getShare{if(mControl==nil){mControl=[[Controlalloc]init];}returnmControl;}-(id)init{//你需要初始化的属性。。。}@end

PHP语言中的单例模式:

classsingleton{privatefunction__construct(){}staticpublicfunctioninstance(){static$obj=null;if($obj===null){$obj=newself();}return$obj;}}?>

参见

多例模式


免责声明:以上内容版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。感谢每一位辛勤著写的作者,感谢每一位的分享。

——— 没有了 ———
编辑:阿族小谱
发表评论
写好了,提交
{{item.label}}
{{commentTotal}}条评论
{{item.userName}}
发布时间:{{item.time}}
{{item.content}}
回复
举报
点击加载更多
打赏作者
“感谢您的打赏,我会更努力的创作”
— 请选择您要打赏的金额 —
{{item.label}}
{{item.label}}
打赏成功!
“感谢您的打赏,我会更努力的创作”
返回

更多文章

更多精彩文章
打赏
私信

推荐阅读

· 设计模式
发展历史建筑师克里斯托佛·亚历山大在1977/79年编制了一本汇集设计模式的书,但是这种设计模式的思想在建筑设计领域里的影响远没有后来在软件开发领域里传播的广泛。肯特·贝克和沃德·坎宁安在1987年,利用克里斯托佛·亚历山大在建筑设计领域里的思想开发了设计模式并把此思想应用在Smalltalk中的图形用户接口(GUI)的生成中。一年后埃里希·伽玛在他的苏黎世大学博士毕业论文中开始尝试把这种思想改写为适用于软件开发。与此同时JamesCoplien在1989年至1991年也在利用相同的思想致力于C++的开发,而后于1991年发表了他的著作AdvancedC++ProgrammingStylesandIdioms。同年ErichGamma得到了博士学位,然后去了美国,在那与RichardHelm,RalphJohnson,JohnVlissides合作出版了《设计模式:可复用面向对象软件的基础...
· 设计模式
发展历史建筑师克里斯托佛·亚历山大在1977/79年编制了一本汇集设计模式的书,但是这种设计模式的思想在建筑设计领域里的影响远没有后来在软件开发领域里传播的广泛。肯特·贝克和沃德·坎宁安在1987年,利用克里斯托佛·亚历山大在建筑设计领域里的思想开发了设计模式并把此思想应用在Smalltalk中的图形用户接口(GUI)的生成中。一年后埃里希·伽玛在他的苏黎世大学博士毕业论文中开始尝试把这种思想改写为适用于软件开发。与此同时JamesCoplien在1989年至1991年也在利用相同的思想致力于C++的开发,而后于1991年发表了他的著作AdvancedC++ProgrammingStylesandIdioms。同年ErichGamma得到了博士学位,然后去了美国,在那与RichardHelm,RalphJohnson,JohnVlissides合作出版了《设计模式:可复用面向对象软件的基础...
· 模式生物
相关条目Ensembl-模式生物基因组数据库模式种动物试验基因组计划
· 模式种
植物分类学里的模式种定义模式种一般来说是指:当为一个属被命名时,需要指定一个种作为成立此属的依据,此被指定的种即称为此属的模式种。任一属或属的次分类阶层的学名之模式,来自种名,也就是种名在属的命名时被认为等同此种的模式标本。原则处理植物命名时,与模式相关的法规乃依据国际植物命名法规,当中原则二规定:“借由命名模式来给定植物分类群名称。”由此原则衍生的相关问题在国际植物命名法规所有界定、讨论者,泛称为模式法。例如:早田兰属(HayataAver.)2009年,LeonidV.Averyanov北越的采集发现新种兰科植物裂唇早田兰(HayataglanduliferaAver.),拟新增新的属名,Hayata。Averyanov指定以早田文藏所发表的植物东部线柱兰(Hayatatabiyahanensis)为本属的模式种,并以Hayata命名,以纪念早田文藏。参见正模标本副模标本模式生物参考文...
· 反面模式
举例社会和组织结构组织结构从天而降的责任(AccidentalOwnership):雇员们接手了一个与当前系统完全无关的系统,在没有合适的训练、学习或关心下就得维护它分析瘫痪(Analysisparalysis):花费太多精力在项目的分析阶段血刃(Bleedingedge,刀锋):采用一些未经测试和/或尚不稳定的前沿技术来运营,从而导致成本超支、表现/性能不佳,和/或交付延期。摇钱树(cashcow):盈利的老产品通常会导致对新产品的自负委员会设计(Designbycommittee):很多人同时进行设计,却没有统一的看法承诺升级(Escalationofcommitment):明知错了还不能收回之前的决定独裁管理(Managementbyperkele):用完全听不进异议的独裁作风进行管理目标管理(Managementbyobjectives):通过数字管理,过于关注非本质而或不易取得的

关于我们

关注族谱网 微信公众号,每日及时查看相关推荐,订阅互动等。

APP下载

下载族谱APP 微信公众号,每日及时查看
扫一扫添加客服微信