Java单例设计模式
2015-08-11 17:18
357 查看
注:设计模式是在大量的实践中总结和理论化之后优选的代码结构、编程风格、以及解决问题的思考方式。
23种设计模式。
一、单例设计模式:
解决的问题:使得一个类只能创建一个对象。
方法一(饿汉式):
懒汉式线程安全解决方式:
23种设计模式。
一、单例设计模式:
解决的问题:使得一个类只能创建一个对象。
方法一(饿汉式):
public class TestSingleton { public static void main(String[] args) { Singleton s1 = Singleton.getInstance(); Singleton s2 = Singleton.getInstance(); System.out.println(s1 == s2);//true } } class Singleton { //1.私有化构造器,使得在类的外部不能调用此构造器 private Singleton() { } //2.在类的内部创建一个类的实例,当加载Singleton类时就创建好了实例对象 private static Singleton instance = new Singleton(); //3.通过公共的方法来调用私有的对象 //4.此公共的方法只能通过类来调用,因此设置为static,同时类的实例也必须为static声明,所以2.需要static关键字 public static Singleton getInstance() { return instance; } }方法二(懒汉式:可能存在线程安全问题):
public class TestSingleton { public static void main(String[] args) { Singleton s1 = Singleton.getInstance(); Singleton s2 = Singleton.getInstance(); System.out.println(s1 == s2);//true } } class Singleton { //1.私有化构造器,使得在类的外部不能调用此构造器 private Singleton() { } //2.在类的内部创建一个类的实例,当加载Singleton类时就创建好了实例对象 private static Singleton instance = null; //3.通过公共的方法来调用私有的对象 //4.此公共的方法只能通过类来调用,因此设置为static,同时类的实例也必须为static声明,所以2.需要static关键字 public static Singleton getInstance() { if(instance == null) { instance = new Singleton(); } return instance; } }
懒汉式线程安全解决方式:
/* * 对于懒汉式的线程安全问题:使用同步机制 * 对于一般的方法内,使用同步代码块,可以考虑使用this。 * 对于静态方法而言,使用当前类本身充当锁。 */ public class TestSingleton { public static void main(String[] args) { Singleton s1 = Singleton.getInstance(); Singleton s2 = Singleton.getInstance(); System.out.println(s1 == s2);//true } } class Singleton { //1.私有化构造器,使得在类的外部不能调用此构造器 private Singleton() { } //2.在类的内部创建一个类的实例,当加载Singleton类时就创建好了实例对象 private static Singleton instance = null; //3.通过公共的方法来调用私有的对象 //4.此公共的方法只能通过类来调用,因此设置为static,同时类的实例也必须为static声明,所以2.需要static关键字 public static Singleton getInstance() { if(instance == null) { synchronized(Singleton.class) { if(instance == null) { instance = new Singleton(); } } } return instance; } }
相关文章推荐
- java书籍
- 【Java代码保护技术】代码混淆
- 如何通过MyEclipse生成含有第三方包的jar包
- springMVC 【@response 返回对象自动变成json并且防止乱码】 & 【配置支持实体类中的@DateTimeFormat注解】
- jdk自带的jvm监控工具
- 字符串分割--java中String.split()用法
- 字符串排序问题
- eclipse的WEB项目无理由错误
- JAVA,Play framework 入门,打印hello word
- eclipse Android关联源码
- mybatis 与spring整合配置
- java.net.InetAddress类的使用
- Java泛型详解
- php-wamp+eclipse+php环境搭建
- eclipse配置
- Java学习笔记
- JAVA 注册 HUANXIN 即时通信
- 【WEB-INF】WEB-INF是Java的WEB应用的安全目录
- 自动生成Myeclipse7.5注册码
- ubuntu下使用eclipse时logcat只显示Level,其他信息均无显示