最近一直在看《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设计模式》这本书还真是好。

 

Java设计模式学习笔记(单例模式)的更多相关文章

  1. C#设计模式学习笔记-单例模式随笔

    最近学习 设计模式,从单例模式入手 啥是单例模式: 要实现一个单例类的话,首先,肯定是不能让用户自行生产的,那就是说明不能让用户new,所以,就必须把构造函数设置成为私有的 因为静态变量的生命周期跟整 ...

  2. C#设计模式学习笔记-单例模式(转)

    C#设计模式学习笔记-单例模式 http://www.cnblogs.com/xun126/archive/2011/03/09/1970807.html 最近在学设计模式,学到创建型模式的时候,碰到 ...

  3. java设计模式学习笔记--接口隔离原则

    接口隔离原则简述 客户端不应该依赖它不需要的接口,即一个类对另一个类的依赖应建立在最小的接口上 应用场景 如下UML图 类A通过接口Interface1依赖类B,类C通过接口Interface1依赖类 ...

  4. java设计模式学习笔记--单一职责原则

    单一职责原则注意事项和细节 1.降低类的复杂度,一个类只负责一项职责 2.提高可读性,可维护性 3.降低变更引起的风险 4.通常情况下,我们应当遵守单一职责原则,只有逻辑足够简单,才可以在代码级违反单 ...

  5. java设计模式学习笔记--浅谈设计模式

    设计模式的目的 编写软件的过程中,程序员面临着来自耦合性,内聚性以及可维护性,可扩展性,重用性,灵活性等多方面的挑战.设计模式为了让程序具有更好的 1.代码重用性(即:相同功能的代码,不用多次编写) ...

  6. Java设计模式学习笔记(五) 单例模式

    前言 本篇是设计模式学习笔记的其中一篇文章,如对其他模式有兴趣,可从该地址查找设计模式学习笔记汇总地址 1. 使用单例模式的原因 以Windows任务管理器为例,在Windows系统中,任务管理器是唯 ...

  7. Java设计模式学习笔记(二) 简单工厂模式

    前言 本篇是设计模式学习笔记的其中一篇文章,如对其他模式有兴趣,可从该地址查找设计模式学习笔记汇总地址 正文开始... 1. 简介 简单工厂模式不属于GoF23中设计模式之一,但在软件开发中应用也较为 ...

  8. Java设计模式学习笔记(三) 工厂方法模式

    前言 本篇是设计模式学习笔记的其中一篇文章,如对其他模式有兴趣,可从该地址查找设计模式学习笔记汇总地址 1. 简介 上一篇博客介绍了简单工厂模式,简单工厂模式存在一个很严重的问题: 就是当系统需要引入 ...

  9. Java设计模式学习笔记(四) 抽象工厂模式

    前言 本篇是设计模式学习笔记的其中一篇文章,如对其他模式有兴趣,可从该地址查找设计模式学习笔记汇总地址 1. 抽象工厂模式概述 工厂方法模式通过引入工厂等级结构,解决了简单工厂模式中工厂类职责太重的问 ...

  10. Java设计模式学习笔记,一:单例模式

    开始学习Java的设计模式,因为做了很多年C语言,所以语言基础的学习很快,但是面向过程向面向对象的编程思想的转变还是需要耗费很多的代码量的.所有希望通过设计模式的学习,能更深入的学习. 把学习过程中的 ...

随机推荐

  1. 关于mybatis 的mapper namespace 作用及解析

    因为语言惯性,大部分的namespace 在语言级别*来说是作为一种限定性标识来用,起到唯一或一类的标识.来看看语言(以PHP语言为例)上的namespace的作用实例 一.namespace 在PH ...

  2. Java经典实例:使用正则表达式:测试模式

    import java.util.regex.Pattern; /** * Created by Frank * 在Java中使用正则表达式:测试模式 */ public class RESimple ...

  3. 关于javascript的一些知识以及循环

    javascript的一些知识点:1.常用的五大浏览器:chrome,firefox,Safari,ie,opera 2.浏览器是如何工作的简化版:3.Js由ECMAjavascript;DOM;BO ...

  4. JS 事件代理

    事件处理器:onclick.onmouseover.... 在传统的事件处理中,你需要为每一个元素添加或者是删除事件处理器.然而,事件处理器将有可能导致内存泄露或者是性能下降——你用得越多这种风险就越 ...

  5. SAP程序代码中RANGE表的用法禁忌

    最近经常有出现以上的SQL代码导致程序DUMP,SAP错误日志如下:       经过检查RANGE表GR_MATNR,当用于WHERE条件是,只限较小的数据量的情况(约100条左右): 若为大数据量 ...

  6. SharePoint 创建模版页

    [1]需要安装SharePoint Designer  最新版编辑工具 [2]我用的是SharePoint Server 2013 如果是Office 请匹配寻找 1.创建母版页面 打开右上角-网站设 ...

  7. SharePoint Server 2016 Update

    Today’s post was written by Seth Patton, senior director of product management for the SharePoint te ...

  8. sharepoint 权限继承相关

    重新继承父级权限: SPList.ResetRoleInheritance(); 断开继承: SPList.BreakRoleInheritance(true); 用powershell断开继承: $ ...

  9. mac安装Aws cli失败

    OS X EI 10.11 报错信息如下: Found existing installation: six 1.4.1 DEPRECATION: Uninstalling a distutils i ...

  10. android SharedPreferences 轻量级存储!

    首先在当前进程也就是当前的项目里面进行存储 SharedPreferences.Editor editor = mContext.getSharedPreferences("tvplay&q ...