设计模式之单例模式
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式之单例模式相关的知识,希望对你有一定的参考价值。
作为程序员必读经典《重构 改善既有代码的设计》《effective java》两本书,对于提升自己代码的优雅程度确实是非常有帮助。这段事件在学习设计模式,看了《大话设计模式》,虽然这是一本很受非议的一本书,但是每一件事情都是小马过河,不亲自试试怎么知道不适合自己呢。
看过大话设计模式之后,感觉有那么一丝明悟,对于面向对象的理解似乎有那么更近一层的理解,在写优质的代码方面,很有帮助。
进入正题,单例模式。
有些对象只需要一个,如:配置文件、工具类、线程池、缓存、日志对象等
多个程序读取一个配置文件,实际上配置文件还是只有一个,如果创造出多个实例,就会导致很多问题,占用资源过多,不一致的结果等
单例对象(Singleton)是一种常用的设计模式。在Java应用中,单例对象能保证在一个JVM中,该对象只有一个实例存在。这样的模式有几个好处:
1、某些类创建比较频繁,对于一些大型的对象,这是一笔很大的系统开销。
2、省去了new操作符,降低了系统内存的使用频率,减轻GC压力。
3、有些类如交易所的核心交易引擎,控制着交易流程,如果该类可以创建多个的话,系统完全乱了。(比如一个军队出现了多个司令员同时指挥,肯定会乱成一团),所以只有使用单例模式,才能保证核心交易服务器独立控制整个流程。
单例模式分类:
1、饿汉模式 加载类时创建实例,因此加载类比较慢,运行时获取实例比较快,且是线程安全的
2、懒汉模式 不在类加载时创建,获取时才创建实例,所以类加载时比较快而获取实例是比较慢,且是线程不安全
//饿汉式 class Fruit{ public static Fruit fruit = new Fruit(); private Fruit(){ } public static Fruit getInstance(){ return fruit; } }
public static void main(String[] args) { //饿汉式 Fruit f1 = Fruit.getInstance(); Fruit f2 = Fruit.getInstance(); System.out.println(f1); System.out.println(f2); }
懒汉式实例:
public class Person { public static Person person; //定义私有的构造函数,防止外部进行创建对象 private Person(){ } public static Person getInstance(){ if(person == null){ synchronized(Person.class){ if(person == null){//双重检查 person = new Person(); } } } return person; } }
public static void main(String[] args) { //懒汉式 Person p1 = Person.getInstance(); Person p2 = Person.getInstance(); System.out.println(p1); System.out.println(p2); }
本贴知识点由大兵哥给我的资料整理而成,发到csdn只是想在做一遍复习和养成写博客的习惯,致谢大兵哥~,大兵哥在平时的学习中给过我很多帮助和学习经验以及笔记。
以上是关于设计模式之单例模式的主要内容,如果未能解决你的问题,请参考以下文章