• 设计模式之单例模式


     单例模式 (Singleton Pattern) 是最简单的设计模式之一。设计思想是确保一个类只有一个实例(对象)。

      1.为了确保只有一个类只有一个实例就要私有化构造函数,防止new的出现;

           2.类本身提供一个获取该类对象的方法,每次返回同一个对象;

     单例模式大致分为两种类型:懒汉式,饿汉式;

    废话不多说上代码:

    package com.jde.jiangdeenleanpraent.design.single;
    
    public class Single {
    
        private Single singgle = null;
    
        /**
         * 私有化构造函数,防止new
         */
        private Single() {
        }
    
        /**
         * 懒汉式,使用的时候才加载
         * 在多线程情况下会有线程安全问题
         */
        public Single getSinggle() {
            if (null == singgle) {
                return new Single();
            }
            return singgle;
        }

    大家可能已经看出上面那段代码的问题了,在多线程情况下还是有可能创建多个对象,如果一个线程走到new Single();另一个线程已经进入if判断那就会产生多个对象。

    现将代码改动如下:

        /**
         * 懒汉式,多线程情况下线程安全,但是效率低
         */
        public synchronized Single getSyncSingle() {
            if (null == singgle) {
                return new Single();
            }
            return singgle;
        }

    现在看一下饿汉式的创建方式:

    package com.jde.jiangdeenleanpraent.design.single;
    
    public class Single {
    
        private static final Single singgle = new Single();
    
        /**
         * 私有化构造函数,防止new
         */
        private Single() {
        }
    
        /**
         * 饿汉式,初始化就先new出一个对象,每次调用都返回同一对象
         */
        public Single getSingle() {
            return singgle;
        }

    懒汉式的好处是,对象用的时候才生成,提升项目启动效率,如果不用不会占用内存。

    饿汉式的好处是,效率高,但是在初始化的时候就生成对象,如果不用会占用内存,造成内存资源的浪费。

  • 相关阅读:
    MyEclipse 2015反编译插件安装
    RocketMQ事务消费和顺序消费详解
    Rocket重试机制,消息模式,刷盘方式
    前端js上传文件 到后端接收文件
    Junit进行单元测试
    json简单使用
    valgrind的使用--检测内存
    使用scrapy框架爬取自己的博文(3)
    使用scrapy框架爬取自己的博文
    Scrapy下xpath基本的使用方法
  • 原文地址:https://www.cnblogs.com/jiangde/p/11208180.html
Copyright © 2020-2023  润新知