java 单例模式
饿汉式单例
对于饿汉模式,我们可这样理解:该单例类非常饿,迫切需要吃东西,所以它在类加载的时候就立即创建对象。
懒汉式单例类
对于懒汉模式,我们可以这样理解:该单例类非常懒,只有在自身需要的时候才会行动,从来不知道及早做好准备。它在需要对象的时候,才判断是否已有对象,如果没有就立即创建一个对象,然后返回,如果已有对象就不再创建,立即返回。
单例设计模式常用于JDBC链接数据库
注意:
1 我们常用的是第一种饿汉式,因为:
(1)既然采用了单例设计模式,就是为了使用单例类的对象,所以就先把他实例化出来.
(2)在懒汉式中存在一定的安全隐患,需要加上同步关键字synchronized,否则就谈不上单例了,但是加上了synchronized效率就稍逊了
2 在第一种办法中,代码private static final Single SINGLE=new Single();为什么有final呢"同一对象"这个概念——只有这么一个对象,而且它是不可以被修改的.
如果不用final修饰 Single SINGLE那么就会有这么一种情况:业务很复杂,在不经意间就修改了此对象,造成各种错误.
第一种(饿汉式):
思路:
(1)不让其他类建立该类的对象.即将构造函数设置为私有!
(2)自定义一个本类对象
(3)将自定义的对象提供出去.即定义一个get方法,返回值为此类的对象。
分析:
第一步:将单例类中构造函数私有化了且利用一个get()函数向外提供此类的对象,所以其他类无法构造此类的对象。
第二步:但其他类要想调用此单例类里的方法,于是只有采用内名.方法名()来实现,这就要求这个方法必须是静态static的。
第三步:又因为静态方法只能访问静态成员!所以要将SINGLE设置为静态的
public class SingleDemo { public static void main(String[] args) { Single s1=Single.getSingle(); s1.setNumber(44); Single s2=Single.getSingle(); s2.setNumber(55); System.out.println("s1.number="+s1.number); System.out.println("s2.number="+s2.number); if(s1.equals(s2)){ System.out.println("s1与s2是同一对象即:s1==s2");//if条件成立 } } } class Single{ int number; public int getNumber() { return number; } public void setNumber(int number) { this.number = number; } private Single(){};//第一步 private static final Single SINGLE=new Single();//第三步 public static Single getSingle(){//第一步和第二步 return SINGLE; } }
第二种(懒汉式):
package cn.com; public class SingleDemo2 { public static void main(String[] args) { Single s1=Single.getSingle(); s1.setNumber(44); Single s2=Single.getSingle(); s2.setNumber(55); System.out.println("s1.number="+s1.number); System.out.println("s2.number="+s2.number); if(s1.equals(s2)){ System.out.println("s1与s2是同一对象即:s1==s2");//if条件成立 } } } class Single{ int number; public int getNumber() { return number; } public void setNumber(int number) { this.number = number; } private Single(){}; private static Single SINGLE=null; public static synchronized Single getSingle(){//多线程时加上synchronized是关键!!! if(SINGLE==null){ SINGLE=new Single(); return SINGLE; } else{ return SINGLE; } } }
以上就是对java 单例设计模式的详解,如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
P70系列延期,华为新旗舰将在下月发布
3月20日消息,近期博主@数码闲聊站 透露,原定三月份发布的华为新旗舰P70系列延期发布,预计4月份上市。
而博主@定焦数码 爆料,华为的P70系列在定位上已经超过了Mate60,成为了重要的旗舰系列之一。它肩负着重返影像领域顶尖的使命。那么这次P70会带来哪些令人惊艳的创新呢?
根据目前爆料的消息来看,华为P70系列将推出三个版本,其中P70和P70 Pro采用了三角形的摄像头模组设计,而P70 Art则采用了与上一代P60 Art相似的不规则形状设计。这样的外观是否好看见仁见智,但辨识度绝对拉满。