在大部分时候,我们把类的构造器定义成public访问权限,允许任何类自由创建该类的对象。但是在某些时候,允许其他类自由创建该类的对象没有任何意义,还可能造成系统性能下降(因为创建一个对象的系统开销问题)。例如系统可能只有一个窗口管理器,一个假脱机打印设备或一个数据库引擎访问点,此时如果在系统中为这些类创建多个对象就没有太大的事迹意义。
如果一个类始终只能创建一个实例,则这个类被称为单例类。
总之,在一些特殊场景下,要求不允许自由创建该类的对象,而是只允许为该类创建一个对象。为避免其他类自由创建该类的实例,我们把该类的构造器使用private修饰,从而把该类的所有构造器隐藏起来。
根据良好的封装的原则:一旦把该类的构造器隐藏起来,则需要提供一个public方法作为该类的访问点,用于创建该类的对象,且该方法必须使用static修饰(因为调用该方法之前还不存在对象,因此调用该方法的不可能是对象,只能是类)。
除此之外,该类还必须缓存已经创建的对象,否则改类无法知道是否曾将创建过对象,也就无法保证值创建一个对象。为此改类需要使用一个属性来保存曾经创建的对象,因为该属性需要被上面的静态方法访问,故此属性必须使用static修饰。
基于上面的介绍,下面是例子:
class Singleton(
//使用一个变量来缓存曾经创建的实例
private static Singleton instance;
private Singleton(){}
public static Singleton getInstance(){
if (instance == null)
{
instance = new Singleton();
}
return instance;
}
)
public class TestSingleton{
public static void main(String[] args)
{
singleton s1 = Singleton.getIncetance();
singleton s2 = Singleton.getIncetance();
//将输出true
System.out.println(s1==s2);
}
}
第二种方法:
public class Singleton {
//在自己内部定义自己的一个实例,只供内部调用
private static Singleton instance = new Singleton();
private Singleton(){
//do something
}
//这里提供了一个供外部访问本class的静态方法,可以直接访问
public static Singleton getInstance(){
return instance;
}
}
第三种方法:
public class Singleton {
private static Singleton instance = null;
private Singleton(){
//do something
}
public static Singleton getInstance(){
if(instance==null){
synchornized(Singleton.class){
if(null == instance){
instance = new Singleton();
}
}
}
return instance;
}
}//这个模式将同步内容下方到if内部,提高了执行的效率,不必每次获取对象时都进行同步,只有第一次才同步,创建了以后就没必要了。
分享到:
相关推荐
总的来说,这个项目为学习和理解单例模式和工厂模式在实际开发中的应用提供了一个很好的示例。通过结合这两种模式,可以构建出既保证了对象唯一性,又能灵活应对不同产品创建需求的系统。对于Java开发者来说,深入...
单例模式是软件设计模式中的一种经典模式,它保证了类只有一个实例存在,并提供一个全局访问点。在Java等面向对象编程语言中,单例模式常用于管理共享资源,如数据库连接池、线程池或者配置文件等。结合工厂模式,...
单例模式是软件设计模式中的一种经典模式,用于确保一个类只有一个实例,并提供一个全局访问点。...通过学习和实践这些单例模式的实现,我们可以更好地理解和应用设计模式,提升代码的质量和可维护性。
在C++编程中,单例模式是一种常用的软件设计模式,它保证一个类只有一个实例,并提供一个全局访问点。线程安全的单例模式在多线程环境下尤其重要,因为不正确的实现可能导致多个线程创建多个实例,这违反了单例模式...
单例模式是一种设计模式,它控制了类的实例化过程,确保一个类只有一个实例,并提供一个全局访问点。在PHP中,单例模式通常用于管理共享资源,如数据库连接、缓存系统或日志记录,因为这些场景下,创建多个实例可能...
Java单例模式是一种设计模式,它允许...以上就是关于Java单例模式的深入理解和常见实现方式,希望对你理解单例模式有所帮助。在实际开发中,灵活运用并结合具体场景选择合适的单例模式将有助于提高代码质量和可维护性。
单例模式是一种设计模式,它的主要目标是确保一个类只有一个实例,并提供一个全局访问点。在软件工程中,单例模式常用于控制资源的共享,比如数据库连接池...理解并正确使用单例模式对于构建高效、稳定的系统至关重要。
首先,理解单例模式的基本概念。单例模式的核心思想是限制类的实例化过程,确保在程序运行期间,类的实例只有一个。通过控制类的构造函数,使其不能被外部直接实例化,而是通过一个静态方法来获取唯一的实例。这样,...
首先,理解单例模式的基本原理。单例模式的核心在于限制类的实例化过程,通常通过私有构造函数和静态工厂方法来实现。在C#中,我们可以创建一个静态私有变量来保存类的唯一实例,然后提供一个公共的静态方法来获取这...
首先,我们要理解单例模式的基本原则:限制类的实例化次数,确保一个类只有一个实例,并提供一个全局访问点。懒汉式单例模式的特点是延迟加载,即只有在第一次使用时才会创建实例,这样可以提高系统性能,因为如果...
首先,让我们理解单例模式的基本概念。在软件工程中,单例模式保证一个类只有一个实例,并提供一个全局访问点。这个设计模式在许多场景下都很实用,比如数据库连接、配置管理等,因为这些对象通常需要在整个应用程序...
首先向关注过我这个系列...这立刻让我想到了最常用也是最简单最容易理解的一个设计模式 单例模式 何为 单例模式 ? 故名思议 即 让 类 永远都只能有一个实例。 由于 示例代码 比较简单 我也加了注释,这里就不在赘述
- 单例模式会隐藏类的实例关系,增加代码的复杂性和理解难度。 - 在某些情况下,如果需要多个实例,单例模式会成为反模式。 总之,单例模式是一种常用的创建型设计模式,它在特定场景下能够有效提高程序效率,但...
单例模式是软件设计模式中的一种,它保证一个类只有一个实例,并提供一个全局访问点。在C++中,实现单例模式有多种方法,我们将会深入探讨这一模式的原理、优缺点以及如何在实际编程中应用。 单例模式的核心在于...
首先,我们需要理解单例模式的基本原理。单例模式的关键在于限制类的实例化过程,确保任何时候都只有一个实例存在。在C#中,这通常通过以下方式实现: 1. 将构造函数设为私有(private),防止外部代码直接实例化...
单例模式是一种常用的软件设计模式,在这种模式中,一个类只能拥有一个实例,并且该类必须自行创建并提供这个实例。通常,单例模式用于确保某个类在整个应用程序生命周期中只存在一个实例,这有助于节省资源并简化对...
单例模式是设计模式中的一种,它在软件工程中用于控制类的实例化过程,确保一个类只有一个实例,并提供一个全局访问点。这种模式在资源管理、缓存、日志记录等方面广泛应用。本文将详细讨论四种常见的单例实现方式:...
在`myFactoryDemo`中,可能会有一个单例类,如`SingletonDemo`,它通过私有构造函数防止外部直接创建实例,并提供一个静态方法或静态变量来获取唯一实例。例如: ```java public class SingletonDemo { private ...
单例模式是软件设计模式中的一种基础且广泛应用的模式,它的主要目的是确保一个类只有一个实例,并提供一个全局访问点。在Java中,实现单例模式有多种...在理解了各种实现方式后,才能更好地利用单例模式解决实际问题。