Java设计模式----单例模式(Singleton)
来源:互联网 发布:淘宝主播尚美男 编辑:程序博客网 时间:2024/04/27 22:51
1. 单例模式的概念
单例模式的意思就是一个类只有一个实例。单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类称为单例类。
2. 关键点:
1) 一个类只有一个实例
2)必须自行创建这个实例
3)自行向系统提供这个实例
3. 单例类所包含的关键要素:
1) 私有的构造方法 (避免在外部被实例化)
2) 指向自己实例的私有静态应用
3) 以自己的实例为返回值的静态的共有方法
4. 常用的几种实现方式:
一:懒汉式单例(类加载时不初始化)
/** * 单例---懒汉式(线程安全) * 类加载时不初始化,类加载速度快,运行时获取对象速度慢 * @author zqkj001 * */public class Singleton {public static Singleton singleton=null; /* private 构造方法,防止被外部实例化 */private Singleton(){}/** * 静态实例创建方法 * 使用synchronized关键字同步,确保多线程环境下线程安全 * @return */public static synchronized Singleton getInstance(){if(singleton==null){return new Singleton();}return singleton;}}二、饿汉式单例(类加载时初始化)
/** * 单例---饿汉式 * 1、类加载时完成初始化,不会有线程问题 * 2、类加载时初始化,所以类加载速度慢,获取对象速度快 * @author zqkj001 * */public class Singnalton1 { public static Singnalton1 s=new Singnalton1();/** * 私有构造方法,防止被外部实例化 */private Singnalton1() {}public static Singnalton1 getInatance(){return s;}}三、使用内部类维护单例的实现
/** * 单例--内部类维护单例的实现(线程安全) * @author zqkj001 * */public class Singalton2 {private Singalton2() {}/** * 使用内部类完成单例的实现 * 缺点:如果构造方法中抛出异常,则实例永远不会被创建 * */private static class SingaltonFactory{private static Singalton2 instance=new Singalton2();}public static Singalton2 getInstance(){return SingaltonFactory.instance;} }
0 0
- JAVA设计模式:单例(Singleton)
- 【Java】单例(singleton)设计模式
- JAVA设计模式:单例(Singleton)
- Java设计模式之单例模式(singleton模式)
- java设计模式之单例模式(Singleton模式)
- Java设计模式之单例模式(singleton模式)
- java设计模式---singleton---单例模式
- Java设计模式----------单例模式(Singleton)
- Java设计模式--单例模式(Singleton)
- Java设计模式 单例模式(Singleton)
- Java设计模式--单例(Singleton)模式
- Java设计模式----单例模式(Singleton)
- Java设计模式 - 单例模式(Singleton)
- java设计模式--Singleton单例模式
- Java设计模式---Singleton单例模式
- Java设计设计模式之单例模式(Singleton)
- java设计模式(一):Singleton(单例模式)
- java设计模式(4):单例模式(Singleton)
- HTML中引入CSS的方法
- 使用HP Unified Functional Testing---检查点的总体实现02
- ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: java.io.IOException: Cannot lock storage /op
- Android Touch事件分发
- 程序员久坐不动的8大危害
- Java设计模式----单例模式(Singleton)
- 如何用C语言获取文件的大小
- 数据结构例程——以孩子兄弟链存储的树的高度
- Codeforces#303-D. Queue-水题
- Java Servlet与Applet、CGI、JSP的比较
- Linux进程同步之记录锁(fcntl)
- SpringMVC访问静态页面
- 我的iOS开发之路-前言
- iOS 面试题汇总