从网上看到很多设计模式,尤为单例模式比较简单,也比较常用,在网上查的大部分都是官方回答,不厌其烦。
单例模式,比较简单但是常用,单例有很多写法,今天就说一种简单易懂的。
单例模式特点:
1、单例类必须自己创建自己的唯一实例并且只有一个实例
2、必须拥有一个私有的构造函数(防止在别的类中new出一个新的类对象)
3、必须声明一个静态的私有的(类)类型的变量
4、必须有个公有的静态的方法(给所有对象提供这一实例 )(判断系统是否已经有了这个单例,如果有则返回,没有则创建 )
代码部分:
**代码部分放入编辑器中看的会清晰些
【注】在单例里写别的方法时与普通类写方法是一样的,唯一不同的是单例需要保证类对象的唯一性。只有一个地址。
单例模式特点:
1、单例类必须自己创建自己的唯一实例并且只有一个实例
2、必须拥有一个私有的构造函数(防止在别的类中new出一个新的类对象)
3、必须声明一个静态的私有的(类)类型的变量
4、必须有个公有的静态的方法(给所有对象提供这一实例 )(判断系统是否已经有了这个单例,如果有则返回,没有则创建 )
代码部分:
[AppleScript]
纯文本查看
复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
namespace Temp
{
[
/
size]
[size
=
4
]
/
/
步骤一[
/
size]
[size
=
4
]Class Singleton
{
[
/
size]
[size
=
4
]
/
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
/
/
/
定义一个私有静态变量
[color
=
#4169e1] private static Singleton single;[/color]
/
/
定义一个私有构造
[color
=
#4169e1] private Singleton() { } [/color]
/
/
在方法中实现类的实例化
[color
=
#4169e1] public static Singleton Sing()
{
[
/
color]
/
/
判断Single是否有值(如果没有New一个返回出去,如果有直接返回)
[color
=
#4169e1] if (single == null)
{
single
=
new
Singleton
(
)
;
}
return
single;
}
[
/
color]
/
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
/
/
/
普通方法
public void Add
(
int a
,
int b
)
{
Console.WriteLine
(
"a + b = "
+
(
a
+
b
)
)
;
}
}
[
/
size][size
=
4
]
/
/
步骤二:[
/
size][size
=
4
]
Class Program
{
static void Main
(
string
[] args
)
{
[
/
size]
[size
=
4
]
/
/
调用单例的对象
Singleton sin
=
Singleton.Sing
(
)
;[
/
size]
[size
=
4
]
/
/
利用声明的单例对象调用方法
sin.Add
(
1
,
2
)
;
}
}
}
|
**代码部分放入编辑器中看的会清晰些
【注】在单例里写别的方法时与普通类写方法是一样的,唯一不同的是单例需要保证类对象的唯一性。只有一个地址。
优点: 1、在内存里只有一个实例,减少了内存的开销,尤其是频繁的创建和销毁实例。 2、避免对资源的多重占用(比如写文件操作)。
缺点:没有接口,不能继承,与单一职责原则冲突,一个类应该只关心内部逻辑,而不关心外面怎么样来实例化。
具体什么时候使用单例,完全看个人需求。
以上纯粹是个人的对单例模式的一些理解,作为新鸟可能会有写的不对的地方,如果有不对的地方或不理解的地方,你们回帖,本人会尽量修正。
希望对一些不了解单例模式的人有一些帮助。