单例模式是众多模式中最简单的一个,了解单例模式及其应用对学习其他模式有很大帮助。但对于到底什么是单例模式,网上解释却不太容易理解,我根据自己的学习,对单例模式有了一定的了解,大家参考一下,有不对的地方请提提意见,在这里xiao yun~~先谢过了哈~~~~那么什么是单例模式呢?单例模式,是指某个类保证只创建一个实例,并且能够自己实例化这个对象而且能够向整个系统提供这个实例。显然单例模式的要点有三个;一是某各类只能有一个实例;二是它必须自行创建这个事例;三是它必须自行向整个系统提供这个实例。
单例模式又有三个变种,分别为饿汉式单例模式 、懒汉式单例模式 、登记式单例模式。
举个例子吧
例一:饿汉式单例模式
//单态模式的理解与运用
//饿汉式单例
//为什么叫饿汉式单例呢,因为这个类一被加载就自己创建了一个对象,
//而不管你用没用到这个对象
view plaincopy to clipboardprint?
1. public class Single {
2.
3. private static int count =0;
4.
5. //1.第一构造方法私有
6.
7. private Single(){
8.
9. count ++;
10.
11. };
12.
13. // 测试生成几个对象
14.
15. public static void getInfo(){
16.
17. System.out.println(count);
18.
19. }
20.
21. //2. 由自己实例化对象
22.
23. private static final Single sl = new Single();
24.
25. //3. 向整个系统提供本对象
26.
27. public static Single getSingle(){
28.
29. return sl;
30.
31. }
32.
33. }
34.
35. 下面测试这个单例模式程序到底是不是能只生成一个实例
36.
37.
38. public class TestSingle {
39.
40. public static void main(String[] args){
41.
42. //单利模式测试生成几个对象
43.
44. Single s1 = Single.getSingle();
45.
46. Single s2 = Single.getSingle();
47.
48. Single s3 = Single.getSingle();
49.
50. Single s4 = Single.getSingle();
51.
52. Single s5 = Single.getSingle();
53.
54. Single.getInfo();
55.
56. }
57.
58.
59. }
60.
61.
62. 由于例子写的注释写的很详细 我就不在具体解释了
63.
64. 下面的是饿汉式的例子
65.
66. //懒汉式单例模式
67.
68. public class Singleton {
69.
70. private static int count=0;
71.
72. private Singleton(){
73.
74. count++;
75.
76. };
77.
78. private static Singleton sn = null;
79.
80. synchronized public static Singleton getSingleton(){
81.
82. if(sn==null){
83.
84. sn = new Singleton();
85.
86. return sn;
87.
88. }
89.
90. else return sn;
91.
92. }
93.
94. public static void getInfo(){
95.
96. System.out.println(count);
97.
98. }
99.
100.
101. }
public class Single { private static int count =0; //1.第一构造方法私有 private Single(){ count ++; }; //测试生成几个对象 public static void getInfo(){ System.out.println(count); } //2.由自己实例化对象 private static final Single sl = new Single(); //3.向整个系统提供本对象 public static Single getSingle(){ return sl; } } 下面测试这个单例模式程序到底是不是能只生成一个实例 public class TestSingle { public static void main(String[] args){ //单利模式测试生成几个对象 Single s1 = Single.getSingle(); Single s2 = Single.getSingle(); Single s3 = Single.getSingle(); Single s4 = Single.getSingle(); Single s5 = Single.getSingle(); Single.getInfo(); } } 由于例子写的注释写的很详细 我就不在具体解释了 下面的是饿汉式的例子 //懒汉式单例模式 public class Singleton { private static int count=0; private Singleton(){ count++; }; private static Singleton sn = null; synchronized public static Singleton getSingleton(){ if(sn==null){ sn = new Singleton(); return sn; } else return sn; } public static void getInfo(){ System.out.println(count); } }
这里我要多说两句 到底懒汉和饿汉有什么区别呢
并不是仅仅一个同步 同步只是为了保证线程安全的 ,因为 懒汉式不是和饿汉式一样,只是在需要的时候才创建实例,所以容易出现多了线程同时创建的情况 所以加上同步。现在知道他们为什么起这样奇怪的名字了吧!
接下来要说的是 什么时候才会用到单例呢 现在金融危机 就举个银行的例子吧 大家都知道银行都有总行和分行,那么总行做为一个类来说,它就应该采用单例模式,假设不是单例模式,总行可以创建多个实例,那么你在支行创建一个总行的对象存了一些钱,我也在支行创建一个对象存了一些钱,那么总行知道自己到底有多少钱么 不知道 ,因为对象不同。所以必须采取单例模式。大家会发现这两种单例有个缺点,就是不能被继承,为解决这个问题,又提出了登记式单例模式。例子我还没写出来。。。。。。。。。。待续 如果大家想学习设计模式,推荐大家一本书。《java与设计模式》,据说是国内相当来说比较好的,想要的留言,我发给你!
分享到:
相关推荐
单例模式是一种设计模式,它的主要目标是确保一个类只有一个实例,并提供一个全局访问点。在软件工程中,单例模式常用于控制资源的共享,比如数据库连接池、线程池或者日志系统等,这些资源通常需要全局唯一且高效地...
单例模式是软件设计模式中的一种,它保证一个类只有一个实例,并提供一个全局访问点。在C#中,单例模式常用于管理共享资源或控制类的实例化过程,以提高性能、节约系统资源,特别是在整个应用程序生命周期内只需要一...
Java设计模式-单例模式详解 单例模式是 Java 设计模式中的一种常用的设计模式,旨在保证一个类仅有一个实例,并提供一个访问它的全局访问点。单例模式的目的是为了保证在一个进程中,某个类有且仅有一个实例。 ...
Java设计模式之单例模式详解 一、单例模式概览 单例模式(Singleton Pattern)是面向对象设计模式中的一种,属于创建型模式。它确保一个类仅有一个实例,并提供一个全局访问点来访问该实例。单例模式的核心在于控制...
设计模式之单例模式详解 单例模式是一种常用的软件设计模式,其定义是单例对象的类只能允许一个实例存在。许多时候整个系统只需要拥有一个的全局对象,这样有利于我们协调系统整体的行为。 单例模式的实现主要是...
### Java多线程单例模式详解 #### 一、单例模式概述 单例模式(Singleton Pattern)是一种常用的软件设计模式,它确保一个类仅有一个实例,并提供一个全局访问点。这种模式通常用于那些需要频繁实例化然后销毁的...
单例模式的实现机制,并发情况下的单例模式的存在问题及解决方法,无锁的线程安全单例模式
单例模式是软件开发中一种非常重要的设计模式,它确保一个类只有一个实例,并提供一个全局访问点。在JavaScript这样的动态语言中,单例模式的实现方式很多样,而且可以非常灵活。下面,我们就来深入探讨单例模式在...
单例模式的核心在于限制类的实例化过程,通过私有化构造方法并提供一个静态公共方法来获取唯一实例。在OC中,我们通常使用分类(Category)来隐藏初始化方法,同时利用GCD(Grand Central Dispatch)或NSLock来确保...
内容概要:本文详尽地阐述了 C# 中单例模式的设计思想以及其实现方式,并且特别针对单例模式的线例安全提供了多种解决方案,包括锁(lock),最终给出了一段非线程安全和一段线程安全版本的代码供参考。 适合人群:C# ...
Java单例模式是一种常见的设计模式,它用于控制类的实例化过程,确保一个类在整个应用程序中只有一个实例存在。这种模式通常用于管理共享资源或者需要频繁创建和销毁的对象,以节省系统资源并提供全局访问点。 单例...
在软件工程中,单例模式是创建型设计模式之一,其目的是确保一个类仅有一个实例,并提供一个全局访问点。Java语言中的单例模式实现有多种方式,包括饿汉式、懒汉式和登记式单例。不同的实现方式适应不同的场景和需求...
在iOS开发中,单例模式是一种常见的设计模式,它确保一个类只有一个实例,并提供一个全局访问点。Swift3中,有四种主要的实现单例模式的方法。这些方法各有优缺点,适应不同的场景需求。以下是对这四种单例模式的...
单例模式是软件设计模式中的一种经典模式,它在Java编程中被广泛使用。这个模式的主要目的是确保一个类只有一个实例,并提供一个全局访问点。这样做的好处在于可以控制资源的共享,减少内存开销,以及简化对全局配置...
单例模式是一种设计模式,它在软件工程中广泛用于确保类只有一个实例,并提供一个全局访问点。Swift3中,有四种常见的单例实现方式,每种都有其特点和适用场景。下面我们将详细讲解这四种单例模式并提供相应的实例。...
PHP单例模式详解 单例模式的概念 单例模式是指整个应用中某个类只有一个对象实例的设计模式。具体来说,作为对象的创建方式,单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统全局的提供这个实例。它...
李建忠老师的设计模式-单例模式讲解,示例以C++编程语言呈现。