`
dengwanchuan
  • 浏览: 47814 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
最近访客 更多访客>>
社区版块
存档分类
最新评论

设计模式之Singleton(单态)

    博客分类:
  • java
阅读更多

单态定义 :
Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。

在很多操作中,比如建立目录 数据库连接都需要这样的单线程操作。

还有, singleton能够被状态化; 这样,多个单态类在一起就可以作为一个状态仓库一样向外提供服务,比如,你要论坛中的帖子计数器,每次浏览一次需要计数,单态类能否保持住这个计数,并且能synchronize的安全自动加1,如果你要把这个数字永久保存到数据库,你可以在不修改单态接口的情况下方便的做到。

另外方面,Singleton也能够被无状态化。提供工具性质的功能,

Singleton模式就为我们提供了这样实现的可能。使用Singleton的好处还在于可以节省内存,因为它限制了实例的个数,有利于Java垃圾回收(garbage collection)。

我们常常看到工厂模式中类装入器(class loader)中也用Singleton模式实现的,因为被装入的类实际也属于资源。

如何使用?

 

第一种:饱汉模式

public class SingleTon {

    private SingleTon(){

       }

 

    // 实例化放在静态代码块里可提高程序的执行效率,但也可能更占用空间

    private final static SingleTon instance = new SingleTon();

    public static SingleTon getInstance(){

       return instance;

    }

}

 

第二种:饥汉模式

public class SingleTon {

    private SingleTon(){}

   

    private static instance = null;//new SingleTon();

   

    public static synchronized SingleTon getInstance(){

       if(instance == null)

           instance = new SingleTon();

       return instance;

    }

}

 

第三种:用枚举

    public enum SingleTon{

       ONE;

   

    }

 

第三:更实际的应用(在什么情况用单例)

public class SequenceGenerator{

    // 下面是该类自身的业务功能代码

    private int count = 0;

 

    public synchronized int getSequence(){

       ++count;

    }

   

    // 下面是把该类变成单例的代码

    private SequenceGenerator(){}

    private final static instance = new SequenceGenerator();

    public static SingleTon getInstance(){

       return instance;

    }  

   

}

 

第四:

    public class MemoryDao

    {

    private HashMap map = new HashMap();

   

   public void add(Student stu1){

        map.put(SequenceGenerator.getInstance().getSequence(),stu1);

    }

  

   // MemoryDao 变成单例

  }

 

 

 

 

 

 

Singleton 模式主要作用是保证在 Java 应用程序中,一个类 Class 只有一个实例存在。

一般 Singleton 模式通常有几种种形式 :

第一种形式 : 定义一个类,它的构造函数为 private 的,它有一个 static private 的该类变量,在类初始化时实例话,通过一个 public getInstance 方法获取对它的引用 , 继而调用其中的方法。

public class Singleton {

private Singleton(){}

       // 在自己内部定义自己一个实例,是不是很奇怪?

       // 注意这是 private 只供内部调用

       private static Singleton instance = new Singleton();

       // 这里提供了一个供外部访问本 class 的静态方法,可以直接访问  

       public static Singleton getInstance() {

         return instance;   

       }

   }

   第二种形式 :

public class Singleton {

   private static Singleton instance = null;

   public static synchronized Singleton getInstance() {

   // 这个方法比上面有所改进,不用每次都进行生成对象,只是第一次     

   // 使用时生成实例,提高了效率!

   if (instance==null)

     instance new Singleton();

               return instance;   

   }

}

其他形式 :

定义一个类,它的构造函数为 private 的,所有方法为 static 的。

一般认为第一种形式要更加安全些

分享到:
评论

相关推荐

    JAVA设计模式chm文档

    设计模式之Singleton(单态) 结构模式: 设计模式之Facade(外观) 设计模式之Proxy(代理) 设计模式之Adapter(适配器) 设计模式之Composite(组合) 设计模式之Decorator(油漆工) 设计模式之Bridge 设计模式之Flyweight(享...

    设计模式文档 chm

    设计模式之Singleton(单态) 结构模式: 设计模式之Facade(外观) 设计模式之Proxy(代理) 设计模式之Adapter(适配器) 设计模式之Composite(组合) 设计模式之Decorator(油漆工) 设计模式之Bridge 设计模式之Flyweight(享...

    Java设计模式之单态模式(Singleton模式)介绍

    单态模式(Singleton模式)是Java设计模式中的一种,它的主要目标是确保一个类在整个应用程序中只有一个实例存在。这种模式的应用场景广泛,特别是在需要全局共享的资源管理、配置中心、日志服务等场合非常常见。 ...

    GoF 23种设计模式的详解与应用

    创建模式:设计模式之Factory,设计模式之Prototype(原型),设计模式之Builder,设计模式之Singleton(单态). 结构模式:设计模式之Facade(外观),设计模式之Proxy(代理),设计模式之Adapter(适配器),设计模式之Composite...

    Java中单态设计模式

    ### Java中单态设计模式详解 #### 一、引言 设计模式是在长期软件开发过程中提炼出来的最佳实践,它们提供了一种标准化的方式用于解决特定类型的问题。对于Java开发者而言,熟悉并掌握各种设计模式是非常重要的,...

    JAVA设计模式(单态模式和简单工厂模式)

    单态模式的定义: Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。 在项目的很多地方都会用到它,比如说数据库的链接。 使用Singleton的好处还在于可以节省内存,因为它限制了实例...

    设计模式一点通之单态模式

    单态模式(Singleton Pattern)是设计模式中的一种基础模式,主要用来确保一个类只有一个实例,并提供一个全局访问点。在软件工程中,当一个类只能有一个实例而且客户可以从一个众所周知的访问点访问它时,这样的...

    设计模式一点通之单态模式 C++

    单态模式(Singleton Pattern)是软件设计模式中的一种,它保证一个类只有一个实例,并提供一个全局访问点。这种模式在需要频繁创建和销毁对象,且只允许存在一个实例的情况下非常有用,例如配置管理、线程池、缓存...

    JAVA设计模式23种

    设计模式之Singleton(单态/单件) 阎宏博士讲解:单例(Singleton)模式 保证一个类只有一个实例,并提供一个访问它的全局访问点 设计模式之Factory(工厂方法和抽象工厂) 使用工厂模式就象使用 new一样频繁. 设计模式...

    设计模式整理(很全)

    创建模式 设计模式之Singleton(单态/单件) 阎宏博士讲解:单例(Singleton)模式 保证一个类只有一个实例,并提供一个访问它的全局访问点 设计模式之Factory(工厂方法和抽象工厂) 使用工厂模式就象使用new一样频繁....

    单态模式(代码)

    单态模式(Singleton Pattern)是软件设计模式中的一种,它保证了类只有一个实例,并提供一个全局访问点。这种模式在很多场景下非常有用,比如配置管理、线程池、缓存管理和日志记录等,因为它可以确保在整个系统中...

    二十三种设计模式【PDF版】

    设计模式之 Singleton(单态/单件) 阎宏博士讲解:单例(Singleton)模式 保证一个类只有一个实例,并提供一个访问它的全局访问点 设计模式之 Factory(工厂方法和抽象工厂) 使用工厂模式就象使用 new 一样频繁. ...

    单态模式(PPT)

    单态模式,是一种常用的软件设计模式,其核心思想是确保一个类在整个应用程序中只有一个实例,并提供全局访问点。这种模式的出现主要是为了解决对象创建的控制问题,特别是在某些需要频繁创建和销毁的对象中,单态...

    Net单态模式的案例

    在.NET环境中,无论是C#还是ASP.NET项目,单态模式都是经常被用到的设计模式之一,尤其在处理全局配置、数据库连接、缓存管理等场景下。 在C#中实现单态模式,通常有几种常见的方法: 1. **懒汉式**:延迟初始化,...

    单态模式的设计和应用

    单态模式(Singleton Pattern)是一种常用的软件设计模式,它的核心目标是确保一个类在整个应用程序中只有一个实例,并提供全局唯一的访问点。这种模式在资源管理、配置管理、对象协调等方面有广泛应用,例如创建...

    有关static block静态代码块和单态设计模式

    单态设计模式(Singleton Pattern)是一种常见的软件设计模式,它的目标是确保一个类只有一个实例,并提供一个全局访问点。这样做的好处包括资源管理的有效性、性能优化以及简化多线程环境下的同步控制。在Java中,...

    单态模式的练习

    单态模式(Singleton Pattern)是设计模式中的一种,它的主要目的是确保一个类只有一个实例,并提供一个全局访问点。这个模式通常用于控制资源的共享,比如数据库连接、线程池或者配置对象等。在Java或其他面向对象...

    深入浅出设计模式之单件模式

    ### 深入浅出设计模式之单件模式 #### 一、单件模式概述 单件模式(Singleton Pattern)是软件设计模式中最为常见的一种,它的主要目标是确保某个类只有一个实例,并提供一个全局访问点。单件模式在很多情况下都...

    .Net单态模式的案例

    单态模式(Singleton Pattern)是设计模式中的一种,它的核心思想是限制类的实例化,确保一个类只有一个实例,并提供全局访问点。在.NET开发中,单态模式被广泛应用于那些需要频繁实例化然后销毁的对象,或者需要...

Global site tag (gtag.js) - Google Analytics