单例模式
2018-06-18 03:55:06来源:未知 阅读 ()
一、什么是单例
1、私有的静态全局变量,变量类型就是该类的类型。
2、构造方法私有化(避免使用new去创建对象)
3、对外提供公有的静态方法,用于获取该类对象。
二、单例解决什么问题
确保类对象的唯一性(即该类只能有一个对象)
三、单例的种类和代码实现
饥汉模式
1 public class Singleton { 2 3 private static Singleton instance = null; //静态全局变量 4 5 /** 6 私有的构造方法 7 @param 无 8 */ 9 private Singleton(){ 10 11 } 12 13 //静态初始化块 14 static{ 15 instance= new Singleton(); 16 } 17 18 /** 19 静态方法getInstance() 20 @param 无 21 */ 22 public static Singleton getInstance(){ 23 //饱汉模式 24 /*if(instance == null){ 25 instance= new Singleton(); 26 }*/ 27 return instance; 28 } 29 }
测试单例模式
1 public class SingletonTest { 2 3 /** 4 * @param args 5 */ 6 public static void main(String[] args) { 7 8 //不能通过new来创建对象,因为构造方法私有 9 //Student s3= new Student(); 10 //调用Student类的静态方法获取对象的地址 11 Singleton s1= Singleton.getInstance(); 12 Singleton s2= Singleton.getInstance(); 13 /* 14 比较两个变量的值是否相等如果相等,则表明只创建了一个对象, 15 两个变量都共有该对象的地址 16 */ 17 System.out.println(s1 == s2); 18 } 19 20 }
升级版
1 public class Singleton1 { 2 3 private static final class SingletonHolder{ 4 private static final Singleton1 INSTANCE = new Singleton1(); 5 } 6 7 private Singleton1(){ 8 9 } 10 11 public static Singleton1 getInstance(){ 12 return SingletonHolder.INSTANCE; 13 } 14 }
反序列化版
1 public class Singleton2 implements Serializable{ 2 3 //防止创建多个对象 4 private static final class SingletonHolder{ 5 private static final Singleton2 INSTANCE = new Singleton2(); 6 } 7 8 private Singleton2(){ 9 10 } 11 12 public static Singleton2 getInstance(){ 13 return SingletonHolder.INSTANCE; 14 } 15 16 //反序列化 17 private Object readResolve(){ 18 return SingletonHolder.INSTANCE; 19 } 20 } 21 22 //枚举实现单例 23 /* 24 public enumSingleton{ 25 INSTANCE; 26 public File openFile(String fileName){ 27 return getFile(fileName); 28 } 29 }*/
饱汉模式
1 public class Singleton3 { 2 3 private static volatile Singleton3 singleton3; 4 5 private Singleton3(){ 6 7 } 8 9 public static Singleton3 getInstance(){ 10 if(null == singleton3){ 11 synchronized (Singleton3.class) { 12 if(null == singleton3){ 13 singleton3 = new Singleton3(); 14 } 15 } 16 } 17 return singleton3; 18 } 19 20 }
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:0基础小白怎么学好Java?
- 5月到6月程序员到底经历了和什么,工资狂跌***元,你是否也 2020-06-10
- 为什么阿里巴巴Java开发手册中不允许魔法值出现在代码中? 2020-06-09
- 设计模式-委派/策略模式 2020-06-09
- 计算机基础到底是哪些基础?为什么很重要! 2020-06-08
- 深入理解:设计模式中的七大设计原则 2020-06-07
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash