初识单例模式(java学习笔记)

来源:互联网 发布:java加密与解密的艺术 编辑:程序博客网 时间:2024/06/05 11:01

这周的java实验就是单例模式,java老师培养我们学习英文的好方法啊。直接给我们的是一段英文的实验要求,先要我们翻译过来,才能明白具体的实验要求。

Brain Barbell

 

Earlier in this chapter, we saw that a private constructor means that the class can’t be instantiated from code running outside the class. In other words, only code from within the class can make a new instance of a class with a private constructor. (There’s a kind of chicken-and-egg problem here. ) 

What if you want to write a class in such a way that only ONE instance of it can be created, and anyone who wants to use an instance of the class will always use that one, single instance?

 

首先将以上英文翻译成中文,然后根据以上描述编写程序。


其实上面英文大体意思就是要我们实现一下单例模式。

java中单例模式是一种常见的设计模式,单例模式分三种:懒汉式单例、饿汉式单例、登记式单例三种。
单例模式有一以下特点:
1、单例类只能有一个实例。
2、单例类必须自己创建自己的唯一实例。
3、单例类必须给所有其他对象提供这一实例。
单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。

java是一门真正面对对象的语言,java有很多种的设计模式,这里只是一个小小的开始吧。

懒汉式单例:在类初始化时,已经自行实例化

package com.whj.design;public class Singleton {private Singleton(){}//私有的默认构造方法   private static final Singleton single=new Singleton();//这里先前这个final忘记加了,然后还使用了set   public static Singleton getSingle() {  //方法,但是后来加上final的时候,set方法就报错了。这个地方有点  return single;                 //没完全搞懂}}package com.whj.design;public class Test {public static void main(String[] args) {      Singleton.getSingle();      System.out.println(Singleton.getSingle());}}

单例模式只能有一个实例,在test类的时候就直接调用这个实例,要实现这样的调用的话就要在前面加上static。

懒汉式单例类.在第一次调用的时候实例化

package com.whj.design;public class Singleton2 {private Singleton2(){}private static Singleton2 single=null;//这里就没有finalpublic synchronized static Singleton2 getInstance() {//静态工厂方法,这个地方synchronized以前没有接触过,有点不明白if (single == null) { single = new Singleton2();} return single;}public static void setSingle(Singleton2 single) {Singleton2.single = single;}}   package com.whj.design;public class Test2 {public static void main(String[] args) {  Singleton2.getInstance();  Singleton2.setSingle(null);      System.out.println(Singleton2.getInstance());      System.out.println(Singleton2.getSingle());}}

synchronized在方法声明时使用,放在范围操作符(public等)之后,返回类型声明(void等)之前.这时,线程获得的是成员锁,即一次只能有一个线程进入该方法,其他线程要想在此时调用该方法,只能排队等候,当前线程(就是在synchronized方法内部的线程)执行完该方法后,别的线程才能进入.(参考了别人的解释)
登记式单例还没有接触,看到了在补充。

感觉设计模式还是有点抽象,还是要自己慢慢领悟啊,任重而道远啊!!!


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 手机迅雷下载版权方不给下载怎么办 白色有彩色花纹的衣服染色了怎么办 载兰花假如下雪和打霜怎么办 皇室战争你的队友离开了对战怎么办 海岛奇兵发现求救信号第三个怎么办 海岛奇兵勋章太多对手太强怎么办 鱼为什么换缸鱼翅黑了怎么办 鱼丸捕鱼大作战换手机了怎么办 2o岁j'j小怎么办 为什么小米5s指纹不能用怎么办 cs录屏软件运行内存太大了怎么办 可是没有他我怎么办啊是什么电视剧 可是没有他我怎么办啊是哪个电视剧 手机太卡了打字打不了了怎么办 梦幻西游的将军令没有电了怎么办 将军令全部的序列号都忘记了怎么办 船员证被公司压着想自己换证怎么办 电子录入系统中无法打开影像怎么办 火车票退票后说银行退款失败怎么办 苹果4s玩游戏闪退怎么办 买了二手房原房主不迁户口怎么办 苹果禁反忘记工id密码了怎么办 玩英雄联盟用腾讯游戏平台卡怎么办 游戏代练接单了没有给我账号怎么办 华为手机进入设置立即闪退怎么办 股东发现公司有做假账现象怎么办 中国在服役期间有纹身被发现怎么办 脚碰了肿了紫了怎么办 外阴出血了怎么办去医院检查没问题 三个半月宝宝体检脚有的紧怎么办 肛门被红枣核刺了一个洞怎么办 肛门里面有棉签上的棉花怎么办 孩子裤子沾屎怎么洗下来怎么办 做完痔疮手术后有点肛门狭窄怎么办 孕妇做b超宝宝不配合怎么办 怀孕产检医生问的尴尬怎么办 带着节育环做的核磁怎么办 便秘洗肠后最一周未排便怎么办 用了开塞露后肚子疼拉不出来怎么办 冰点脱毛当天用沐浴露洗澡了怎么办 自体脂肪填充脸部但发红又痒怎么办