设计模式——单例模式

原创 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
  • 下载

设计模式——单例模式

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

上三篇文章都是在讲工厂模式,这篇就跟吉哥一起学习最常用的模式——单例模式。   概念:在它的核心结构中只包含一个被称为单例的特殊类。   分类:单例模式的形式也比较多,包涵以下8种(这里是把懒...

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

  • 2016-09-03 19:28
  • 18.20MB
  • 下载

Android设计模式——单例模式

单例设计模式,对于系统中的单个对象的要求的首选模式

设计模式——单例模式

单例模式保证一个类只有一个实例,并提供一个访问它的全局访问点

Java设计模式学习01——单例模式

转载自:http://blog.csdn.net/xu__cg/article/details/52902644 Java单例模式是一种常见且较为简单的设计模式。单例模式,顾名思义一个类仅能有一个实...

设计模式第一话——单例模式

(一)  什么是设计模式? 是一套被世人反复使用的,多数人知晓的,经过分类的代码设计经验的总结。 将实战项目比作一场战争的话,设计模式就是孙子兵法的三十六计。 (二)  设计模式的目的是什么? ...

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

单例模式是设计模式中最常见也最简单的一种设计模式,保证了在程序中只有一个实例存在并且能全局的访问到。比如在android实际APP 开发中用到的 账号信息对象管理, 数据库对象(SQLiteOpenH...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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