首页 > 代码库 > 单例模式
单例模式
java设计模式中有一个模式叫单例模式,单例的意思就是该类只能产生一个实例,平时我们定义类可以随自己的意愿创建任意多的实例,但有些情况下,我们必须只能让某些类产生一个实例,像打印机一次只能执行一个打印进程,否则就会乱了。定义单例类我们就不能像普通定义类那样去定义该类了。从例子开始讲解怎么定义产生单例的类。
1 class Singleton 2 { 3 private static Singleton singleton = new Singleton();//用static关键字修饰单例类实例,并定义为私有的 4 private Singleton()//把构造方法定义为私有,这是最重要的 5 { 6 System.out.println("http://www.cnblogs.com/zhi-hao/"); 7 } 8 9 public static Singleton getSingleton()//定义一个获得单例实例的方法,并用static修饰,这样外面就可以直接通过类名来调用该方法了10 {11 return singleton;12 }13 }
1 public class TestSingleton 2 { 3 public static void main(String[] args) 4 { 5 //生成两个实例 6 Singleton s1 = Singleton.getSingleton(); 7 Singleton s2 = Singleton.getSingleton(); 8 if(s1.equals(s2))//判断是否相等 9 {10 System.out.println("s1 == s2");11 System.out.println(s1);//打印输出s112 System.out.println(s2);//打印输出s213 }14 else15 {16 System.out.println("s1 != s2");17 System.out.println(s1);18 System.out.println(s2);19 }20 }21 }
结果:
在定义单例类时更为标准的是下面的方法
1 class Singleton 2 { 3 private static Singleton singleton = null; 4 5 private Singleton() 6 { 7 System.out.println("http://www.cnblogs.com/zhi-hao/"); 8 } 9 10 public static Singleton getSingleton()11 {12 if(null == singleton)//判断是否生成了实例,是就直接返回,否就先生成再返回生成的实例13 {14 singleton = new Singleton();15 }16 return singleton;17 }18 }
以上是在忽略线程或线程安全的情况下成立,如果存在线程时,可能多个线程同时访问生成单例的代码从而就又可能生成多个实例。线程安全是指一个程序中存在多线程,但执行结果跟单线程的执行结果一样,线程也是java中很重要的一个知识点,在这里不详细讨论。
单例模式
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。