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);
}
}
上面列举了三种单例模式的实现方式,当然方案一是最简单的,建议使用。
单例的优点:
- 减少内存开销
- 减少系统性能开销
- 避免对资源的多重占用
- 单例模式可以在系统设置全局的访问点,优化和共享资源访问(例如一个单例类用来负责所有数据表的映射处理
单例的缺点:
- 单例模式一般没有接口,不容易扩展,功能改动时基本上只能修改代码
- 如果单例没有完成,无法进行测试工作
- 单例模式与单一职责原则有冲突。
- 需要保证线程安全
单例的应用场景:
- 要求省城唯一序列号的环境
- 在整个项目中需要一个共享访问点或共享数据,例如一个Web页面的访问计数器
- 创建一个对象需要消耗的资源过多,如访问IO和数据库等资源
- 需要定义大量的静态常量和静态方法(如工具类)的环境
分享到:
相关推荐
单例模式是一种设计模式,它的核心思想是在整个应用程序中,保证一个类只有一个实例存在,并提供一个全局访问点。这样做的好处在于控制共享资源,优化性能,避免并发问题,以及简化对象间的交互。 **定义** 单例...
synchronized (Singleton.class) { if (instance == null) { instance = new Singleton(); } } } return instance; } } ``` 4. **静态内部类**:利用Java类加载机制保证初始化实例时只有一个线程,既高效...
在Qt的Qml环境中,单例模式是一种设计模式,它允许在整个应用程序中创建一个全局访问点,确保某个类只有一个实例存在。这样的设计模式在需要共享数据或者服务时非常有用,避免了多处创建相同对象导致的数据不一致或...
简单的单例模式举例Singleton 分为恶汉式 懒汉式
synchronized (Singleton.class) { if (instance == null) { instance = new Singleton(); } } } return instance; } } ``` 4. **静态内部类**:利用Java类加载机制保证线程安全,同时实现了延迟初始化。 ...
单例模式(Singleton)是设计模式中最简单也是最有争议的一个模式。它主要解决的问题是确保一个类仅有一个实例,并提供一个全局访问点。单例模式适用于那些需要全局访问的场景,比如线程池、缓存、配置对象等。单例...
单例模式的特点有三: 单例类只能有一个实例。 单例类必须自己创建自己的唯一实例。 单例类必须给所有其他对象提供这一实例。 Singleton模式包含的角色只有一个,就是Singleton。Singleton拥有一个私有构造函数,...
synchronized (Singleton.class) { if (instance == null) { instance = new Singleton(); } } } return instance; } } ``` 4. 静态内部类:利用类加载机制保证线程安全,同时延迟初始化。 ```java public ...
这种写法可以保证线程安全.两个if都是不能去掉的.如果去掉第一个if: 那么所有的线程都会到这里来先获取锁,然后判断singleton是否为空.所有线程都会串行
单例模式是软件设计模式中的一种,它保证一个类只有一个实例,并提供一个全局访问点。在C++中,实现单例模式有多种方法,我们将会深入探讨这一模式的原理、优缺点以及如何在实际编程中应用。 单例模式的核心在于...
单例模式是一种设计模式,用于确保一个类在整个应用程序中只存在一个实例。这种模式在Java中广泛应用于需要全局访问点或资源管理的场景,比如配置管理、数据库连接池等。下面将详细阐述单例模式的实现方式、优化策略...
单例模式详解 单例模式是 Java 设计模式中的一种常见模式,旨在保证整个应用中只有一个类的实例存在。单例模式分为三种:懒汉式单例、饿汉式单例、登记式单例。下面对单例模式的特点、实现方式和应用场景进行详细...
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 对象的可见性...
1. **单例模式的基本概念** - 单例模式的核心思想是限制类的实例化过程,只允许创建一个唯一的实例。 - 这个唯一的实例通常被静态方法管理,以保证在任何情况下都只有一个实例存在。 - 全局访问点使得代码可以在...
在Go语言中,实现单例模式(Singleton Pattern)通常涉及确保一个类只有一个实例,并提供一个全局访问点来获取该实例。由于Go语言没有传统的类和对象概念,但具有结构体(struct)和函数,我们可以通过使用包级变量...
1. 单例模式可能会导致代码 耦合度增加,因为在某些情况下,单例对象可能会被多个类使用。 2. 单例模式可能会导致内存泄露,因为单例对象可能会长期驻留在内存中。 因此,在使用单例模式时,需要充分考虑到这些缺点...
单例模式(Singleton) C.策略模式(Strategy) D.外观模式(Fagade) 12. (单选题)下面不属于创建型模式的有( 正确答案: C )。 A.抽象工厂模式( Abstract Factory ) B.工厂方法模式(Factory Method) C.适配器模式...
synchronized (Singleton.class) { if (instance == null) { instance = new Singleton(); } } } return instance; } } ``` 3. 静态内部类 静态内部类方式可以保证线程安全和性能,实现起来也比较简单。 ...
1. 单例模式可以保证系统内存中该类只存在一个对象,节省了系统资源。 2. 对于频繁使用的对象,可以省去创建和销毁对象所花费的时间,提高性能。 3. 单例模式可以全局访问。 缺点: 1. 单例模式一般没有接口,扩展...