最近一直在看《Head First设计模式》,这本书写的确实是很不错的,专注于怎么用最简单的方式最通俗的语言让人了解设计模式。据说GoF的设计模式那本书写的很好,是一本经典,但是就是难懂,这本书应该就是我们这些一看经典书就困的人的宝贝了。

不过Head First系列并不专注于写代码,我就把自己学习的时候写出来的代码贴在这里当做笔记吧,也方便搜到的人参考。

单例模式是我遇到的最多的模式了,这种模式大部分被利用在数据库编程中,因为涉及到资源分配等原因,单例模式是一种非常好的模式。

下面是一段我实现的单例模式代码,也是我们现在工程里在用的,我就不打算写什么懒汉式啊,饿汉式啊的了。

package pattern;

public class Singleton {
private volatile static Singleton instance = null;
private Singleton() { } public static Singleton getInstance() {
if (instance == null) {
synchronized(Singleton.class) {
if (instance == null) {
instance = new Singleton();
}
}
}
return instance;
}
}

下面的代码是它的测试代码:

package pattern;

public class SingletonTest {
public static void main(String[] args) {
Singleton instance = Singleton.getInstance();
String str = instance.toString();
System.out.println(str);
}
}

其实以前我很不理解单例模式为什么叫做单例,为什么这个类只会有一个实例存在。如果我在测试代码里声明两个变量如何呢?

结果后来我debug了一次代码,我才知道了什么叫做只有一个实例。那么测试代码改一下:

package pattern;

public class SingletonTest {
public static void main(String[] args) {
Singleton instance = Singleton.getInstance();
Singleton instance1 = Singleton.getInstance();
String str = instance.toString();
String str1 = instance1.toString();
System.out.println(str);
System.out.println(str1);
}
}

打印出来的结果是一样的。

debug的时候我发现这一句(Singleton instance1 = Singleton.getInstance();)的执行会在if (instance == null)这里返回false,因此是不会重新new一个对象的,因此instance和instance1引用的其实是一个对象,这就是单例模式了。

现在发现学习写代码还是一定要debug的,跟一遍代码逻辑,理解更深。

顺便再多说一句,《Head First设计模式》这本书还真是好。

 

最新文章

  1. 使用 PHP 过滤器(Filter)进行严格表单验证
  2. Hosts文件
  3. 【转】GPU 与CPU的作用协调,工作流程、GPU整合到CPU得好处
  4. PHP 防止表单重复提交
  5. Js获取当前日期时间及其它操作(转)
  6. 30种mysql优化sql语句查询的方法<转>
  7. asp.net内置对象session和cookie
  8. 解决Ubuntu和Windows该文件乱码问题
  9. mysql修改密码Your password does not satisfy the current policy requirements
  10. 2017年最新chrome必备插件推荐
  11. 201521123037 《Java程序设计》第10周学习总结
  12. MySQL 导入外部数据时报错:1153: Got a packet bigger than 'max_allowed_packet' 解决方案
  13. 从JVM字节码执行看重载和重写
  14. python修改字典的值(update map value)
  15. Leetcode 237.删除链表中的节点 By Python
  16. python令牌桶算法
  17. Xlua使用教程、攻略
  18. Maven上传jar包到私服
  19. UVA 227 Puzzle(基础字符串处理)
  20. .NET:字符集和编码学习总结

热门文章

  1. Scalaz(4)- typeclass:标准类型-Equal,Order,Show,Enum
  2. DDD开发框架ABP之本地化/多语言支持
  3. Java清除:收尾和垃圾收集
  4. eventProxy
  5. jQuery瀑布流从不同方向加载3种效果演示
  6. jQuery+turn.js翻书、文档和杂志3种特效演示
  7. Google Web Designer – 创建引人入胜的 HTML5 网站
  8. 如何使用 HTML5 Canvas 制作水波纹效果
  9. MaterialUp - 寻找材料设计灵感必备的网站
  10. 【javascript激增的思考01】模块化编程