`
wangwengcn
  • 浏览: 175127 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

1.单例模式(Singleton)

阅读更多
package _1Singleton;

public class Singleton {
	
	private static Singleton singleton = new Singleton(1);
	
	private Singleton(int i)
	{
		System.out.println(i);
	}

	/**
	 * Solution 1 
	 * 在调用本类任何参数或方法时,singleton都将被实例化
	 * 
	 * @return
	 */
	public static Singleton getInstance()
	{
		return singleton;
	}
	
	/**
	 * Solution 2
	 * 在第一次调用的时候实例化,但是需要同步的开销
	 * 
	 * @return
	 */
    public static Singleton getInstance2() {
        if(singleton == null) {
           synchronized(Singleton.class) {
             if(singleton == null) {
               singleton = new Singleton(2);
             }
          }
        }
        return singleton;
      }
      
	/**
	 * Solution 3
	 * 在第一次调用的时候实例化,不需要同步
	 * 
	 * @return
	 */
      public static Singleton getInstance3() 
      {     
        return SingletonHolder.instance;
      }   
    
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Singleton.getInstance();
	}
	
	private static class SingletonHolder
	{
		private static Singleton instance = new Singleton(3);
    }
}
 

上面列举了三种单例模式的实现方式,当然方案一是最简单的,建议使用。

单例的优点:

  1. 减少内存开销
  2. 减少系统性能开销
  3. 避免对资源的多重占用
  4. 单例模式可以在系统设置全局的访问点,优化和共享资源访问(例如一个单例类用来负责所有数据表的映射处理

单例的缺点:

  1. 单例模式一般没有接口,不容易扩展,功能改动时基本上只能修改代码
  2. 如果单例没有完成,无法进行测试工作
  3. 单例模式与单一职责原则有冲突。
  4. 需要保证线程安全

单例的应用场景:

  1. 要求省城唯一序列号的环境
  2. 在整个项目中需要一个共享访问点或共享数据,例如一个Web页面的访问计数器
  3. 创建一个对象需要消耗的资源过多,如访问IO和数据库等资源
  4. 需要定义大量的静态常量和静态方法(如工具类)的环境
分享到:
评论

相关推荐

    2.单例模式(Singleton)1

    单例模式是一种设计模式,它的核心思想是在整个应用程序中,保证一个类只有一个实例存在,并提供一个全局访问点。这样做的好处在于控制共享资源,优化性能,避免并发问题,以及简化对象间的交互。 **定义** 单例...

    单例模式 Singleton Pattern

    synchronized (Singleton.class) { if (instance == null) { instance = new Singleton(); } } } return instance; } } ``` 4. **静态内部类**:利用Java类加载机制保证初始化实例时只有一个线程,既高效...

    Qt qml Singleton 单例模式

    在Qt的Qml环境中,单例模式是一种设计模式,它允许在整个应用程序中创建一个全局访问点,确保某个类只有一个实例存在。这样的设计模式在需要共享数据或者服务时非常有用,避免了多处创建相同对象导致的数据不一致或...

    Java 单例模式Singleton

    简单的单例模式举例Singleton 分为恶汉式 懒汉式

    关于单例模式的知识要点

    synchronized (Singleton.class) { if (instance == null) { instance = new Singleton(); } } } return instance; } } ``` 4. **静态内部类**:利用Java类加载机制保证线程安全,同时实现了延迟初始化。 ...

    单例模式(Singleton)的6种实现

    单例模式(Singleton)是设计模式中最简单也是最有争议的一个模式。它主要解决的问题是确保一个类仅有一个实例,并提供一个全局访问点。单例模式适用于那些需要全局访问的场景,比如线程池、缓存、配置对象等。单例...

    单例模式Singleton(java源码)

    单例模式的特点有三: 单例类只能有一个实例。 单例类必须自己创建自己的唯一实例。 单例类必须给所有其他对象提供这一实例。 Singleton模式包含的角色只有一个,就是Singleton。Singleton拥有一个私有构造函数,...

    单例模式(singleton)

    synchronized (Singleton.class) { if (instance == null) { instance = new Singleton(); } } } return instance; } } ``` 4. 静态内部类:利用类加载机制保证线程安全,同时延迟初始化。 ```java public ...

    xfhy#Android-Notes#7.单例模式的双重检查锁为什么必须加volatile1

    这种写法可以保证线程安全.两个if都是不能去掉的.如果去掉第一个if: 那么所有的线程都会到这里来先获取锁,然后判断singleton是否为空.所有线程都会串行

    设计模式C++学习之单例模式(Singleton)

    单例模式是软件设计模式中的一种,它保证一个类只有一个实例,并提供一个全局访问点。在C++中,实现单例模式有多种方法,我们将会深入探讨这一模式的原理、优缺点以及如何在实际编程中应用。 单例模式的核心在于...

    单例 模式 singleton

    单例模式是一种设计模式,用于确保一个类在整个应用程序中只存在一个实例。这种模式在Java中广泛应用于需要全局访问点或资源管理的场景,比如配置管理、数据库连接池等。下面将详细阐述单例模式的实现方式、优化策略...

    单例模式详解

    单例模式详解 单例模式是 Java 设计模式中的一种常见模式,旨在保证整个应用中只有一个类的实例存在。单例模式分为三种:懒汉式单例、饿汉式单例、登记式单例。下面对单例模式的特点、实现方式和应用场景进行详细...

    单例模式Singleton

    synchronized (Singleton.class) { if (instance == null) { instance = new Singleton(); } } } return instance; } } ``` 这里使用`volatile`关键字确保了多线程环境下的可见性和有序性,减少了同步开销...

    单例模式讲解说明与实例

    synchronized (Singleton.class) { if (uniqueInstance == null) { uniqueInstance = new Singleton(); } } } return uniqueInstance; } } ``` 这个实现使用 volatile 关键字来确保 singleton 对象的可见性...

    设计之模式之单例(Singleton)

    1. **单例模式的基本概念** - 单例模式的核心思想是限制类的实例化过程,只允许创建一个唯一的实例。 - 这个唯一的实例通常被静态方法管理,以保证在任何情况下都只有一个实例存在。 - 全局访问点使得代码可以在...

    Java设计模式-单例模式详解

    1. 单例模式可能会导致代码 耦合度增加,因为在某些情况下,单例对象可能会被多个类使用。 2. 单例模式可能会导致内存泄露,因为单例对象可能会长期驻留在内存中。 因此,在使用单例模式时,需要充分考虑到这些缺点...

    java设计模式期末考试选择题100道

    单例模式(Singleton) C.策略模式(Strategy) D.外观模式(Fagade) 12. (单选题)下面不属于创建型模式的有( 正确答案: C )。 A.抽象工厂模式( Abstract Factory ) B.工厂方法模式(Factory Method) C.适配器模式...

    ava常用设计模式-单例模式

    synchronized (Singleton.class) { if (instance == null) { instance = new Singleton(); } } } return instance; } } ``` 3. 静态内部类 静态内部类方式可以保证线程安全和性能,实现起来也比较简单。 ...

    单例模式代码

    1. 单例模式可以保证系统内存中该类只存在一个对象,节省了系统资源。 2. 对于频繁使用的对象,可以省去创建和销毁对象所花费的时间,提高性能。 3. 单例模式可以全局访问。 缺点: 1. 单例模式一般没有接口,扩展...

    21单例模式.zip

    1. 单例模式违背了“开闭原则”,不利于代码的扩展和维护。 2. 单例模式一般没有接口,扩展困难。如果要扩展,则除了修改原来的代码,没有第二种途径。 3. 单例模式对测试是不利的,因为无法构造独立的实例进行测试...

Global site tag (gtag.js) - Google Analytics