zoukankan
html css js c++ java
C#设计模式:Singleton模式
如何保证一个类只能有一个实例存在?
在多线程情况下如何解决?
using
System;
using
System.Collections.Generic;
using
System.Text;
namespace
Singleton
{
class
Singleton
{
//
构造函数私有化,保证不被显式实例化
private
Singleton()
{ }
//
定义属性,返回Singleton对象
private
static
Singleton singleton;
public
static
Singleton Instance
{
get
{
if
(singleton
==
null
)
singleton
=
new
Singleton();
return
singleton;
}
}
}
}
//
多线程版本的Singleton
namespace
SingletonMultiThread
{
class
Singleton
{
private
static
object
lockHelper
=
new
object
();
//
构造函数私有化,保证不被显式实例化
private
Singleton()
{}
//
定义属性,返回Singleton对象
private
static
volatile
Singleton singleton
=
null
;
public
static
Singleton Instance
{
get
{
if
(singleton
==
null
)
{
lock
(lockHelper)
{
if
(singleton
==
null
)
singleton
=
new
Singleton();
}
}
return
singleton;
}
}
}
}
//
经典的Singleton实现:仅仅适合无参构造器对象(可用属性实现扩展)
namespace
classicalSingleton
{
sealed
class
Singleton
{
private
Singleton()
{ }
//
内联初始化,后面的new是个静态构造器
public
static
readonly
Singleton Instance
=
new
Singleton();
}
class
Program
{
static
void
Main(
string
[] args)
{
Singleton s1
=
Singleton.Instance;
Singleton s2
=
Singleton.Instance;
if
(
object
.ReferenceEquals(s1, s2))
Console.WriteLine(
"
两个对象是相同的实例。
"
);
else
Console.WriteLine(
"
两个对象非相同的实例。
"
);
}
}
}
查看全文
相关阅读:
68、成员列表初始化?
67、类成员初始化方式?构造函数的执行顺序 ?为什么用成员初始化列表会快一 些?
64、malloc申请的存储空间能用delete释放吗?
63、new和delete的实现原理, delete是如何知道释放内存的大小的额?
62、delete p、delete [] p、allocator都有什么作用?
60、C++模板是什么,你知道底层怎么实现的?
nyoj--814--又见拦截导弹(动态规划+贪心)
hdoj--1950--Bridging signals(二分查找+LIS)
nyoj--214--单调递增子序列(二)(二分查找+LIS)
hdoj--1010--Tempter of the Bone(搜索+奇偶剪枝)
原文地址:https://www.cnblogs.com/flaaash/p/1020841.html
最新文章
Set Matrix Zeroes
Gray Code
Rotate Image
Valid Sudoku
Permutation Sequence
Next Permutation
HSRP 工作机制
HSRP Note
二层安全的最佳推荐做法
Cisco PVLAN
热门文章
交换网络安全性
风暴控制(storm control)
IPSG源保护
综合实验(DHCP snooping,DAI,IPSG)
DHCP监听
Cisco SPAN
74、成员初始化列表的概念,为什么用它会快一些?
73、C++中类的数据成员和成员函数内存分布情况
72、介绍面向对象的三大特性,并且举例说明
69、什么是内存泄露,如何检测与避免
Copyright © 2011-2022 走看看