Java设计模式学习笔记(单例模式)
2016-03-07 20:33
453 查看
最近一直在看《HeadFirst设计模式》,这本书写的确实是很不错的,专注于怎么用最简单的方式最通俗的语言让人了解设计模式。据说GoF的设计模式那本书写的很好,是一本经典,但是就是难懂,这本书应该就是我们这些一看经典书就困的人的宝贝了。
不过HeadFirst系列并不专注于写代码,我就把自己学习的时候写出来的代码贴在这里当做笔记吧,也方便搜到的人参考。
单例模式是我遇到的最多的模式了,这种模式大部分被利用在数据库编程中,因为涉及到资源分配等原因,单例模式是一种非常好的模式。
下面是一段我实现的单例模式代码,也是我们现在工程里在用的,我就不打算写什么懒汉式啊,饿汉式啊的了。
下面的代码是它的测试代码:
其实以前我很不理解单例模式为什么叫做单例,为什么这个类只会有一个实例存在。如果我在测试代码里声明两个变量如何呢?
结果后来我debug了一次代码,我才知道了什么叫做只有一个实例。那么测试代码改一下:
打印出来的结果是一样的。
debug的时候我发现这一句(Singletoninstance1=Singleton.getInstance();)的执行会在if(instance==null)这里返回false,因此是不会重新new一个对象的,因此instance和instance1引用的其实是一个对象,这就是单例模式了。
现在发现学习写代码还是一定要debug的,跟一遍代码逻辑,理解更深。
顺便再多说一句,《HeadFirst设计模式》这本书还真是好。
不过HeadFirst系列并不专注于写代码,我就把自己学习的时候写出来的代码贴在这里当做笔记吧,也方便搜到的人参考。
单例模式是我遇到的最多的模式了,这种模式大部分被利用在数据库编程中,因为涉及到资源分配等原因,单例模式是一种非常好的模式。
下面是一段我实现的单例模式代码,也是我们现在工程里在用的,我就不打算写什么懒汉式啊,饿汉式啊的了。
packagepattern; publicclassSingleton{ privatevolatilestaticSingletoninstance=null; privateSingleton(){ } publicstaticSingletongetInstance(){ if(instance==null){ synchronized(Singleton.class){ if(instance==null){ instance=newSingleton(); } } } returninstance; } }
下面的代码是它的测试代码:
packagepattern; publicclassSingletonTest{ publicstaticvoidmain(String[]args){ Singletoninstance=Singleton.getInstance(); Stringstr=instance.toString(); System.out.println(str); } }
其实以前我很不理解单例模式为什么叫做单例,为什么这个类只会有一个实例存在。如果我在测试代码里声明两个变量如何呢?
结果后来我debug了一次代码,我才知道了什么叫做只有一个实例。那么测试代码改一下:
packagepattern; publicclassSingletonTest{ publicstaticvoidmain(String[]args){ Singletoninstance=Singleton.getInstance(); Singletoninstance1=Singleton.getInstance(); Stringstr=instance.toString(); Stringstr1=instance1.toString(); System.out.println(str); System.out.println(str1); } }
打印出来的结果是一样的。
debug的时候我发现这一句(Singletoninstance1=Singleton.getInstance();)的执行会在if(instance==null)这里返回false,因此是不会重新new一个对象的,因此instance和instance1引用的其实是一个对象,这就是单例模式了。
现在发现学习写代码还是一定要debug的,跟一遍代码逻辑,理解更深。
顺便再多说一句,《HeadFirst设计模式》这本书还真是好。
相关文章推荐
- Spring Security权限管理框架
- 【转载】Java开发环境的搭建以及使用eclipse创建java项目
- Java集合框架(一)
- struts2 国际化和令牌
- spring事务异常回滚使用注意点
- java实现快速排序算法
- Java学习之多线程
- Java代码重构的几种模式
- Spring项目集成Spring-Session以及可能遇到的问题
- 一个java代码生成器的简单实现
- Struts2入门示例教程
- java设计模式之单例模式
- java 异常
- LeetCode : Merge Two Sorted Lists [java]
- java背景音乐
- 新浪微博时间转换工具类
- Java设计模式-设计模式的六种原则
- Eclipse中恢复已删除文件和还原到先前版本
- 《Java实战开发经典》第六章6.1
- LeetCode : Valid Parentheses [java]