单例模式是一种创建型模式,所谓创建型模式就是对实例的生成过程进行管理的一类模式。当编程的时候我们常常有一个这样的问题,我们需要写一个类,规定这个类只能产生一个实例,这个实例在全局被所有类都能够调用到,这个时候我们所使用的就是单例模式。
单实例对象设计模式提供了一个关于私有和静态构造函数的非常好的一个实例。下面我们看一个例子:
using System;
namespace
Donis.CSharpBook
{
public class Chessboard
{
private Chessboard()
{
}
static Chessboard()
{
board =new Chessboard();
board.start=DateTime.Now.ToShortTimeString();
}
public static Chessboard board =null;
public string player1 ;
public string player2 ;
public string start;
}
public class Game{
public static void Main()
{
Chessboard game =Chessboard.board;
game.player1="sally";
game.player2="Bob";
Console.WriteLine("{0} played {1} at {2}",game.player1,game.player2,game.start);
}
}
}
在这个例子中。首先我们可以看到一个私有的构造函数,因为私有的构造函数本身是不能在类外部被访问的,那么就只有在类的内部进行访问了。于是看下面的静态构造函数中显示调用了私有构造函数,实例化了该类,并将它赋予静态成员 board.
这样就可以通过静态实例来访问类的实例成员(看这行代码:Chessboard game = Chessboard.board;),因为静态构造函数总是自动调用的。
让我们在看看下面这个JAVA的例子:
package src;
public class Stin
{
private Stin()//代码段1
{
}
private static Stin stin;//代码段2
public static Stin getStin()//代码段3
{
if(stin==null)//代码段4
{
stin=newStin();//代码段5
}
return stin;
}
}
在这段代码中我们可以看见一些与一般的类不同的地方,当然,单例规定的是所有类都可以调用到,那么这个类首先要是public属性。
首先看这个类的构造方法(代码段1),它的构造方法是一个私有的构造方法,我们知道私有构造方法的类是不能够外部被实例化的,这样的目的就使限制外部类使
用new关键字来创建实例而达到实例不会被随意的创建出来(当然利用反射还是可以实例化的,这里只是一种编译上的限制)。那么既然外部不能够实例化,那就
只好内部实例化了(代码段5)。
如果要被外部访问到,又不能外部实例化,要得到内部实例化的类就必须要是静态属性和静态方法,我们知道静态属性和方法可以通过类直接访问到而不用实例化,
通过这一点我们可以获取到被类内部实例化的实例(代码段2和代码段3都是静态的)。当进入到实例生成的方法中判断是否已经生成实例(代码段4),如果没有
就生成,如果有就直接返回,这样就实现了单例。在整个应用中只能生成一个实例,而生成的这一个实例能被应用中所有类调用到。
单例模式应用的场合和多,而且也有很多不同的变化。
分享到:
相关推荐
单例模式是软件设计模式中的一种经典模式,它在Java编程中被广泛使用,尤其是在需要控制实例化过程,或者确保某类只有一个实例时。本文将深入探讨Java中的单例模式,帮助你理解其原理和应用。 单例模式的核心思想是...
python 设计模式之单例模式
单例模式是软件设计模式中的一种,它的主要目的是确保一个类只有一个实例,并提供一个全局访问点。这种模式常用于数据库连接、缓存管理、日志记录等场景,以避免资源的重复创建和管理,提高系统效率。在PHP中,单例...
java设计模式之单例模式 单例模式是java设计模式中的一种常用的创建型模式,是我们日常开发中最常使用的一种设计模式。它的主要作用是保证系统中一个类只有一个实例。单例模式可以被用来封装一些工具类,例如数据库...
单例模式(Singleton Pattern 单件模式或单元素模式),是常见的一种设计模式,它有三个特点 1.只能有一个实例 2.必须自行创建这个实例 3.必须给其他对象提供这一实例 下面用PHP代码实现一下 <?PHP /** *...
单例模式是设计模式中的一种,它用于确保一个类只有一个实例,并提供一个全局访问点。在C++中,单例模式常被用来解决特定场景下的问题,如在本例中,构建一个全局的日志模块,避免多次实例化和管理日志类的实例。 ...
单例模式对于我们来说一点也不模式,是一个常见的名称,单例模式在程序中的实际效果就是:确保一个程序中只有一个实例,并提供一个全局访问点,节省系统资源 单例模式无论是在实际开发中还是在软件应用中比较常见,...
单例模式是软件设计模式中的一种,其主要思想是确保一个类在整个系统中只能有一个实例存在。这种模式常用于管理共享资源或者需要全局访问的对象,比如数据库连接、缓存服务等。在PHP中,单例模式的应用同样广泛,...
单例模式是一种常用的软件设计模式,其定义是单例对象的类只能允许一个实例存在。 许多时候整个系统只需要拥有一个的全局对象,这样有利于我们协调系统整体的行为。 比如在某个服务器程序中,该服务器的配置信息存放...
单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。在计算机系统中,线程池、缓存、日志对象、对话框、打印机、显卡的驱动程序对象常被设计成单例。这些应用都或多或少具有资源管理器的...
Android 编程设计模式之单例模式是一种常用的设计模式,它可以保证某一个类只有一个实例,并且自行实例化并向整个系统提供这个实例。本文将详细介绍 Android 编程设计模式之单例模式的概念、功能、实现、使用方法及...
C# 设计模式之单例模式是一种常用的设计模式,它限制了类的实例化,使得某个类只能有一个实例,并提供了一个全局访问点来访问该实例。本文将对单例模式的定义、优缺点、实现要点和适用性进行详细的讲解。 单例模式...
前言 最近开始花点心思研究下设计模式,主要还是让自己写的代码可重用性高、保证代码可靠性。所谓设计模式,我找了下定义...单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例类的特殊类。通过