设计模式——单例模式

原创 2012年03月21日 20:09:09

单例模式:作为对象的创建模式,单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。这个类称为单例类。


但我们建立了一个简单的单例类后就可以在单例类中对要创建的对象进行自我创建,定向的向外界提供而不允许外界去创建。这样就可以实现对一些对象和资源的身份权限的验证和达到控制资源的目的。利用单例模式生成的对象是唯一的,确保外界多次引用的对象是同一个。对于一些占用资源较多的类有时候会使用单类模式,同时这个类也可能存在并发问题,所以可能会用到多线程进行控制访问。


建立Car类:

package com.lcq.factory;
 /**
  * 单例模式和工厂方法模式
  * @author lcq
  *
  */
 
 public class Car {
     //保证只能返回同一个对象
     private static Car car = new Car();
 
     /**
      * 将构造函数定义为私有的,不允许外部new
 */
     private Car() {
 
     }
 
     /**
      * 工厂方法
      * @return
 */
     public static Car getInstance() {
         return car;
     }
 
     public void run() {
         System.out.println("开车去东北。。。");
     }
 }

在Test客户类中进行测试:

package com.lcq.factory;
 
 public class Test {
     public static void main(String[] args) {
         Car car = Car.getInstance();
         Car car2 = Car.getInstance();
         //得到的car对象是同一个
         if (car == car2) {
             System.out.println("same car");
         }
         car.run();
 
     }
 
 }

上面的实例只是使用了new的方法进行对象的创建,同样也可以通过反射构造单例对象,或者通过序列化构造单例对象,但是其最终的用途是相同的。具体用哪种方法去实现可以根据具体情况而定。


以下是线程安全的单例类:

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

要点:

确保一个类只有一个实例,并提供一个全局访问点。

1)如何保证是单例,只有一个对象:
类中构造器是私有的,实例化只能类本身的方法调用构造器。

2)提供一个全局的方法获取实例化的单例对象:
使用静态static方法。

3)确保多线程中单例:
使用双重检查加锁。(volatile、synchronized)

单例模式类图:






版权声明:本文为博主原创文章,未经博主允许不得转载。

设计模式——单例模式

  • 2011年04月16日 21:55
  • 39KB
  • 下载

设计模式——单例模式

  • 2013年08月11日 14:59
  • 4KB
  • 下载

设计模式(十七)——单例模式

单例模式(Singleton) 单例模式,保证一个类仅有一个实例,并提供一个访问它的全局访问点。...

设计模式实现——单例模式

  • 2016年09月03日 19:28
  • 18.2MB
  • 下载

设计模式——单例模式的几种写法

一、单例模式 单例模式是一种创建型的模式,指某个类采用单例模式后,在这个类被创建后,只产生一个实例以供外部访问,且提供一个全局的访问点。 单例模式在开发中具有相当大的重要性,并且代码实现相对简...

Android开发设计模式之——单例模式

单例模式是设计模式中最常见也最简单的一种设计模式,保证了在程序中只有一个实例存在并且能全局的访问到。比如在android实际APP 开发中用到的 账号信息对象管理, 数据库对象(SQLiteOpenH...

设计模式(3)——单例模式

单例模式(Singleton Pattern)是Java中最简单的设计模式之一。这种设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 这种模式涉及到一个单一的类,该类负责创建自己的对象,同时...

设计模式之——单例模式(Singleton)的常见应用场景

单例模式(Singleton)也叫单态模式,是设计模式中最为简单的一种模式,甚至有些模式大师都不称其为模式,称其为一种实现技巧,因为设计模式讲究对象之间的关系的抽象,而单例模式只有自己一个对象,也因此...

设计模式——单例模式(学习笔记)

最近在学习设计模式,并决定把学习的东西写成笔记,也算是心得了吧。 ——前言 定义:单例模式就是当你希望在你的工程中有个只会实例化一次的类(或者说只有一个对象)时,需要使用的设计模式。既然使用这...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:设计模式——单例模式
举报原因:
原因补充:

(最多只允许输入30个字)