java设计模式之单例模式
1.什么是设计模式
设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。
设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性。
以上是从菜鸟教程中引用的设计模式的相关概念,
按照我的理解就是以前的程序编写人员经过很长时间的编码从而总结出的一套相当好用的程序开发经验。
在此就不多赘述了,如果大家有兴趣可以自行查阅各类资料。
2.单例模式的介绍
单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。也就是说在整个程序中该类有且仅有一个实例。
优点:
1.在内存中只有一个对象,节省了内存空间
2.避免频繁的创建销毁对象,提高性能
3.避免对共享资源的多重占用
缺点
1.扩展困难
2.被实例化的对象如果长期不使用,容易造成内存丢失
应用场景
-
1、要求生产唯一序列号。
-
2、WEB 中的计数器,不用每次刷新都在数据库里加一次,用单例先缓存起来。
其中单例模式其中比较有特点的是饿汉式和懒汉式两种模式,下面我讲分别介绍两种模式。
3.饿汉式实现模式
这种模式就是在一开始创建对象的时候就实例化对象,它是一种线程安全,比较常用,但容易产生垃圾,是一种典型的以空间换时间的做法。
public class hungry_lily {
private hungry_lily(){
}
//在类装载时就初始化
private static hungry_lily lily1 = new hungry_lily();
public static hungry_lily getInstance() {
return lily1;
}
}
4.懒汉式实现模式
在类装载时不实例化对象,而是在需要使用的时候在实例化对象。是一种以空间换时间的做法。它线程不安全,延迟初始化,严格意义上并不是单例模式。
public class lazy_lily {
private lazy_lily(){
}
//在类装载时不初始化
private static lazy_lily lily2 = null;
private static lazy_lily getInstance() {
if(lily2 == null) {
lily2 = new lazy_lily();
}
return lily2;
}
}