摘要:本文深入浅出的讲述了设计模式中的单例模式,并给出了简单的示例,例子浅显易懂,并附带源代码。
单例模式属于对象创建型模式,其意图是保证一个类仅有一个实例,并提供一个访问它的全局访问点。对一些类来说,只有一个实例是很重要的,虽然系统中可以有许多打印机,但却只应该有一个打印机假脱机,只应该有一个文件系统和一个窗口管理器,一个数字滤波器只能有一个A/D转换器,一个会计系统只能专用于一个公司。怎样才能保证一个类只有一个实例并且这个实例易于被访问,一个全局变量使得一个对象可以被访问,但它不能防止你实例化多个对象,一个更好的方法是让类自身负责保存他的唯一实例。这个类可以保证没有其他实例可以被创建,并且它可以提供一个访问该实例的方法,这就是Singleton模式。
实用性:在下面的情况下可以使用Singleton模式。
l 当类只能有一个实例而且客户可以从一个众所周知的访问点访问它时。
l 当这个唯一实例应该是通过子类化可扩展的,并且客户应该无需更改代码就能使用一个扩展的实例时。
例如:一个产生随机数的例子,整个应用程序中只需要一个类的实例来产生随机数,客户端程序从类中获取这个实例,调用这个实例的方法nextInt(),公用的方法访问需要进行同步,这是单例模式需要解决的同步问题。
参与者:Singleton:定义一个Instance操作,允许客户访问它的唯一实例,Instance是一个类操作。可能负责创建自己的唯一实例。
协作关系:客户只能通过Singleton的Instance操作访问一个Singleton的实例。
使用Singleton模式有许多优点:
1. 对唯一实例的受控访问,
2. 缩小命名空间,
3. 允许对操作和表示的精化,
4. 允许可变数目的实例。
5. 比类操作更灵活。
代码:
单例模式中需要解决的重要问题是方法的同步问题,同步的粒度有多大等。在本例子中同在获得类的实例的时候使用了同步,代码如下:
public class Singleton{
private Singleton(){
generator = new Random();
}
public void setSeed(int seed){
generator.setSeed(seed);
}
public int nextInt(){
return generator.nextInt();
}
public static synchronized Singleton getInstance(){
if (instance == null) {
instance = new Singleton();
}
return instance;
}
private Random generator;
private static Singleton instance;
}
客户端调用的代码:
package singleton;
public class Client{
public static void main(String[] args){
Singleton s1 = Singleton.getInstance();
System.out.println(s1.toString());
for(int i=0;i<10;i++){
Singleton s2 = Singleton.getInstance();
System.out.println("The randomed number is "+s2.toString());
}
}
}
总结:单例模式使得应用程序在运行时保持只能有一个实例,在一些大的应用程序中,主程序只需要有一个,因此需要使用单例模式
分享到:
相关推荐
在这个例子中,`test`类实现了单例模式。注意几个关键点: - `__construct`方法是私有的,阻止了外部直接通过`new`创建实例。 - `__clone`方法也是私有的,防止通过克隆的方式创建新实例。 - `getInstance`是一个...
在这个例子中,`Singleton`类有两个类变量:`_instance`用来存储单例实例,`_first_init`是一个布尔值,标记是否已经进行了初始化。`__new__`方法检查`_instance`是否已经存在,如果不存在,则创建一个新的实例并...
以下是对四种Python单例模式实现方式的详细解析: ### 方式一 在这个实现中,使用了一个类方法`from_conf`来创建和返回单例实例。`__instance`变量存储单例实例,当首次调用`from_conf`时,如果`__instance`为`...
在这个例子中,`singleton` 函数充当了单例模式的角色。它首先检查全局变量 `instance` 是否为 `null`。如果是,则创建一个新的 `Person` 实例并将其赋值给 `instance`;如果不是,则直接返回 `instance`。这样就能...
本篇将详细介绍如何利用枚举(enum)来实现单例模式,并结合`Properties`类解析配置文件。 首先,我们来看一下传统的单例模式实现方式,如懒汉式和饿汉式,但这些方法在多线程环境下可能会存在问题。而使用枚举实现...
在单例模式下测试JVM实例是否唯一,可以通过设置一个全局静态变量或者使用Singleton类的静态方法来实现。例如,如果你有一个名为`Singleton`的类,通常会包含一个私有的构造函数和一个静态工厂方法: ```java ...
#### 2.1 单例模式(Singleton) 单例模式确保一个类只有一个实例,并提供一个全局访问点。在Android开发中,单例模式常用于管理全局资源或配置信息。例如,`Context`类就是一个典型的单例模式应用示例。开发者可以...
**Python 单例模式详解** 单例模式是一种设计模式,其核心思想是在整个应用程序中确保一个类只有一个实例存在。这种模式常用于管理共享资源,如全局配置、数据库连接等,以避免因多次实例化造成的资源浪费。在 ...
一、单例模式(Singleton pattern) 单例模式是指在整个应用程序中只维护一个特定类实例,这个实例被所有组件共同使用。Java 中的单例模式的经典例子是 Java.lang.Runtime。从 Java 5 开始,可以使用枚举(enum)来...
通过这个例子,我们学习了如何在C++中实现线程安全的单例模式,以及如何在实际项目中使用和测试单例。记住,虽然单例模式很有用,但过度使用也可能导致设计上的耦合,因此在选择使用单例时需谨慎。
本篇将重点探讨第12个例子——单例模式(Singleton Pattern)。单例模式是一种常用的软件设计模式,在大多数应用场景中,它能够确保一个类只有一个实例,并提供一个全局访问点。接下来,我们将详细解析单例模式的...
1. 单例模式(Singleton): 单例模式确保一个类只有一个实例,并提供一个全局访问点。这在资源管理(如数据库连接)或全局配置时非常有用。以下是一个简单的单例模式实现: ```java public class Singleton { ...
1. **创建型模式**(Creational Patterns):这类模式关注对象的创建过程,包括单例模式(Singleton)、工厂方法模式(Factory Method)、抽象工厂模式(Abstract Factory)、建造者模式(Builder)和原型模式...
本篇文章将详细解读一个名为“水果工厂代码”的项目,该项目运用了工场模式(Factory Pattern)和单例模式(Singleton Pattern),主要语言是C++。我们将深入探讨这两种设计模式的概念、应用场景以及如何在C++中实现...
### 面向对象设计模式解析 #### 一、引言 设计模式是软件工程领域的一个重要组成部分,它提供了一套被广泛接受的解决方案来解决常见的软件设计问题。设计模式不仅可以帮助开发人员写出更加优雅、可维护的代码,还能...
例如,可能会通过游戏开发或者并发处理的例子来解析某些模式,使得理论知识更贴近实际。 学习并熟练应用设计模式,不仅能够提升个人编程技能,还能提高团队的协作效率,降低软件系统的维护成本。因此,对于任何Java...
5. 单例模式(Singleton Pattern):单例模式确保一个类只有一个实例,并提供全局访问点。在例子中,想象有多个老婆(实际上不可能),她们都共享同一个老公,这就是单例模式的应用。单例模式常用于控制资源的访问,...
3. **单例模式**(Singleton) - **描述**:确保一个类只有一个实例,并提供一个全局访问点。这对于控制资源访问非常有用,比如数据库连接或日志文件。 - **示例**:通过静态内部类实现懒加载单例模式。 4. **...