23种设计模式(1)-单例模式

定义:

  单例模式,是一种常用的软件设计模式,在它的核心结构中只包含一个被称为单例的特殊类,通过单例模式可以保证系统中一个类只有一个实例,即一个类只有一个对象实例.

特点:

  1.单例类只能有一个实例

  2.单例类必须自己创建自己的唯一实例

  3.单例类必须给其他对象提供这一实例

单例模式要点:

  1.私有的构造方法

  2.指向自己实例的私有静态引用

  3.以自己实例为返回值的静态的公有的方法

单例模式根据实例化对象的时机的不同分为两种:

  1.一种是饿汉式单例,一种是懒汉式单例.

  饿汉式单例在单例被加载的时候,就实例化一个对象交给自己的引用;而懒汉式单例在调用取得实例方法的时候才会实例化对象

  

public class Singleton{
    private static Singleton singleton = new Singleton();
    private Singleton(){}
    public static Singleton getInstance(){
        return singleton;
    }
}

  懒汉式单例

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

单例模式还有一种双重锁的形式;

public class Singleton{
     private static volatile Singleton instance = null;
     private Singleton(){
      //do something
     }
     public static Singleton getInsstance(){
           if(instance==null){
               synchronized(SingletonClass.class){
                    if(instance==null){
                         instance = new Singleton();
                    }
               }
           }
           return instance;
      }
}

如果面对高并发的情况,而且采用的是懒汉式模式,最好的选择就是双重判断加同步的方式.

单例模式的优点:

  1.在内存中只有一个对象,节省内存空间

  2.避免频繁的创建销毁对象,可以提高性能

  3.避免对共享资源的多重占用

  4.可以全局访问

单例模式的缺点:

  1.扩展困难,由于getInstance 静态函数没有办法生成子类的实例,如果要扩展,只有重写哪个类.

  2.隐式使用引起类结构不清晰

  3.导致程序内存泄漏的问题

单例模式注意事项

  只能使用单例类提供的方法得到单例对象,不要使用反射,否则将会实例化一个新的对象

  不要做断开单例类对象与类中静态引用的危险操作

  多线程使用单例使用共享资源时,注意线程安全的问题

时间: 2024-09-30 03:31:16

23种设计模式(1)-单例模式的相关文章

重头开始学23种设计模式:单例模式

最近感觉做程序又开始浑浑噩噩,对设计模式和算法基本了解,但基本不会用.所以打算最近1个月把设计模式和算法重新,温故而知新下. 首先从程序开发经常涉及到的23种设计模式开始,希望这次能更加熟练的运用设计模式来加强自己的开发能力. 首先从单例模式开始: 单例模式在我的理解是对程序对象的缓存,防止不断new,保持对象唯一性,提高程序性能. namespace SinglePattern { class Program { static void Main(string[] args) { for (i

23种设计模式(一) 单例模式

单例模式 定义:确保一个类只有一个实例,而且自行实例化并向整个系统提供这个实例. 单例模式是23种设计模式中最简单的一种,它有三个要素: 私有的构造方法 指向自己实例的私有静态引用 以自己实例为返回值的静态的公有的方法 单例模式根据实例化对象时机的不同分为两种:一种是饿汉式单例,一种是懒汉式单例.饿汉式单例在单例类被加载时候,就实例化一个对象交给自己的引用:而懒汉式在调用取得实例方法的时候才会实例化对象. 饿汉式单例 public class Singleton { private static

java基础之----23种设计模式(单例模式)

概述 提到单例模式,我们并不陌生,而且面试中也常常会问单例模式相关的问题,接下来就谈谈单例模式,这篇文章会回答如下几个问题: 什么是单例模式? 单例模式有几种实现方式,以及各种实现方式的优劣? 单例模式有什么用? 什么是单例模式 保证一个类仅有一个实例,并提供一个访问它的全局访问点.这是<设计模式>(艾迪生维斯理, 1994)中的定义. 单例模式有几种实现方式 先说答案,有三种,基本上我们只知道两种,就是懒汉式和饿汉式,其实还有第三种,通过静态内部类实现单例模式,下面就说说这三种实现方式. 饿

23种设计模式之单例模式

我们也经常遇到类似的情况,为了节约系统资源,有时需要确保系统中某个类只有唯一一个实例,当这个唯一实例创建成功之后,我们无法再创建一个同类型的其他对象,所有的操作都只能基于这个唯一实例.为了确保对象的唯一性,我们可以通过单例模式来实现,这就是单例模式的动机所在. 定义: 单例模式(Singleton Pattern):确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类称为单例类,它提供全局访问的方法.单例模式是一种对象创建型模式. 那么,怎么创建一个单例对象呢? 首先我们可以

JAVA设计模式总结之23种设计模式

一.什么是设计模式                                                                                                                                        设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 毫无疑问,设计模式于己于他人于

23种设计模式(1):单例模式

转:http://blog.csdn.net/zhengzhb/article/details/7331369 ———————————————————————————————————————— 定义:确保一个类只有一个实例,而且自行实例化并向整个系统提供这个实例. 类型:创建类模式 类图: 类图知识点: 1.类图分为三部分,依次是类名.属性.方法 2.以<<开头和以>>结尾的为注释信息 3.修饰符+代表public,-代表private,#代表protected,什么都没有代表包可

23种设计模式第一种(单例模式)

单例模式单例模式 ------------------------------------------------------------------------------------------------------- 确保一个类只有一个实例,而且自行实例化并向整个系统提供这个实例. -------------------------------------------------------------------------------------------------- 创建类模式

23种设计模式系列之单例模式

本文继续介绍23种设计模式系列之单例模式. 概念: Java中单例模式是一种常见的设计模式,单例模式的写法有好几种,这里主要介绍三种:懒汉式单例.饿汉式单例.登记式单例. 单例模式有以下特点: 1.单例类只能有一个实例. 2.单例类必须自己创建自己的唯一实例. 3.单例类必须给所有其他对象提供这一实例. 单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例.在计算机系统中,线程池.缓存.日志对象.对话框.打印机.显卡的驱动程序对象常被设计成单例.这些应用都或多或少具有资源管理器

Java开发中的23种设计模式详解(转)

设计模式(Design Patterns) --可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样.项目中合理的运用设计模式可以完美的解决很多问题,每种模式在现在中都有相应的原理来与之对应,每一个模式描述了一个在我们周