zoukankan      html  css  js  c++  java
  • Java设计模式学习笔记(单例模式)

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

     
  • 相关阅读:
    【产品】Pony三问
    【数据平台】阿里dataphin
    【数据中台】阿里数据中台架构
    关于 Qt 5,你所需要了解的基础知识
    Skynet 游戏服务器开发实战
    关于自然语言处理,有一本通关手册待接收
    ROS 机器人操作系统进阶实战
    面试官不讲武德,问我如何实现分布式缓存?
    高 star 开源项目来实验楼啦,深度学习强推教材
    Spring Boot 2.4.0 全新发布,还不快来实战
  • 原文地址:https://www.cnblogs.com/wingsless/p/5251807.html
Copyright © 2011-2022 走看看