Java设计模式学习笔记(单例模式)
最近一直在看《Head First设计模式》,这本书写的确实是很不错的,专注于怎么用最简单的方式最通俗的语言让人了解设计模式。据说GoF的设计模式那本书写的很好,是一本经典,但是就是难懂,这本书应该就是我们这些一看经典书就困的人的宝贝了。
Head First设计模式PDF高清完整中文版 下载地址 https://www.linuxidc.com/Linux/2017-02/140536.htm
不过Head First系列并不专注于写代码,我就把自己学习的时候写出来的代码贴在这里当做笔记吧,也方便搜到的人参考。
单例模式是我遇到的最多的模式了,这种模式大部分被利用在数据库编程中,因为涉及到资源分配等原因,单例模式是一种非常好的模式。
下面是一段我实现的单例模式代码,也是我们现在工程里在用的,我就不打算写什么懒汉式啊,饿汉式啊的了。
package pattern;
public class Singleton {
private volatile static Singleton instance = null;
private Singleton() {
}
public static Singleton getInstance() {
if (instance == null) {
synchronized(Singleton.class) {
if (instance == null) {
instance = new Singleton();
}
}
}
return instance;
}
}
下面的代码是它的测试代码:
package pattern;
public class SingletonTest {
public static void main(String[] args) {
Singleton instance = Singleton.getInstance();
String str = instance.toString();
System.out.println(str);
}
}
其实以前我很不理解单例模式为什么叫做单例,为什么这个类只会有一个实例存在。如果我在测试代码里声明两个变量如何呢?
结果后来我debug了一次代码,我才知道了什么叫做只有一个实例。那么测试代码改一下:
package pattern;
public class SingletonTest {
public static void main(String[] args) {
Singleton instance = Singleton.getInstance();
Singleton instance1 = Singleton.getInstance();
String str = instance.toString();
String str1 = instance1.toString();
System.out.println(str);
System.out.println(str1);
}
}
打印出来的结果是一样的。
debug的时候我发现这一句(Singleton instance1 = Singleton.getInstance();)的执行会在if (instance == null)这里返回false,因此是不会重新new一个对象的,因此instance和instance1引用的其实是一个对象,这就是单例模式了。
现在发现学习写代码还是一定要debug的,跟一遍代码逻辑,理解更深。
- java 设计模式 学习笔记(6) 代理模式
- java 设计模式 学习笔记(1) - 简单工厂模式
- java设计模式学习笔记-简单工厂模式
- java 设计模式 学习笔记(5) 装饰模式
- java 设计模式学习笔记十 bridge桥模式
- 我的设计模式学习笔记------>Java设计模式总概况
- 设计模式学习笔记--设计模式在Java I/O中的应用(装饰模式和适配器模式)
- java 设计模式 学习笔记(9) 模板方法模式
- java学习笔记(二十七)抽象类与设计模式
- java 设计模式学习笔记八 composite组合模式
- java 设计模式学习笔记十五 strategy 策略设计模式
- Java菜鸟学习笔记--设计模式篇(一):Singleton Pattern(单例设计模式)
- java 设计模式 学习笔记(五)单例模式
- [学习笔记]jsp+javaBean+Servlet 的设计模式MVC 的实例
- java设计模式学习笔记3 代理模式-静态代理
- java 设计模式学习笔记(7) - 浅拷贝和深拷贝
- java 设计模式 学习笔记 (2) - 工厂方法模式
- Java设计模式(学习笔记)--Strategy 模式
- java 设计模式学习笔记八 composite组合模式
- java 设计模式学习笔记七 facade外观模式