zoukankan      html  css  js  c++  java
  • 设计模式之单例模式

     单例模式 (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;
        }

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

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

  • 相关阅读:
    [书目20130415]改变:28天让自己内心强大
    [引]软件著作权登记申请所需文件
    [转]动软代码生成器之模板功能介绍
    [转]C# 冒泡排序你还会吗?
    [转]细说ASP.NET Forms身份认证
    [转]listview加载性能优化ViewHolder
    [转]App for Android (2) —— Python篇
    [转]sqlserver 创建分区表
    [转]c# 四舍五入、上取整、下取整
    常用 Java 静态代码分析工具的分析与比较
  • 原文地址:https://www.cnblogs.com/jiangde/p/11208180.html
Copyright © 2011-2022 走看看