• 友链

  • 首页

  • 文章归档
h u a n b l o g
h u a n b l o g

欢

HI,Friend

04月
24
C#
设计模式

设计模式-单例模式

发表于 2022-04-24 • 字数统计 1338 • 被 1,508 人看爆

定义

保证一个类仅有一个实例,并提供一个访问它的全局访问点。

单例模式是一种对象创建型模式。
单例模式有3个要点:

  • 一是某个类只能有一个实例;
  • 二是它必须自行创建这个实例;
  • 三是它必须自行向整个系统提供这个实例。

结构

单例模式结构图.png

实现

  单例模式的目的是保证一个类有且仅有一个实例,并提供一个访问它的全局访问点。单例模式包含的角色只有一个,就是单例类----Singleton。单例类拥有一个私有构造函数﹐确保用户无法通过new关键字直接实例化它。除此之外,单例类中还包含一个静态私有成员变量与静态公有的工厂方法﹐该工厂方法负责检验实例的存在性并实例化自己,然后存储在静态成员变量中,以确保只有一个实例被创建。

class Singleton
{
    private static Singleton instance = null;  //静态私有成员变量
    
    //私有构造函数
    private Singleton()
    {

    }

    //静态公有工厂方法,返回唯一实例
    public static Singleton GetInstance()
    {
        if (instance == null)
            instance = new Singleton();
        return instance;
    }
}

class Program
{
    static void Main(string[] args)
    {
        Singleton s = Singleton.GetInstance();
    }
}

在单例模式的实现过程中,需要注意以下三点:

  • (1)单例类构造函数的可见性为private。
  • (2)提供一个类型为自身的静态私有成员变量。
  • (3)提供一个公有的静态工厂方法。

优点

  • (1)单例模式提供了对唯一实例的受控访问。
  • (2)节约资源,无需频繁创建和销毁
  • (3)单例模式允许可变数目的实例。

缺点

  • (1)由于单例模式中没有抽象层,因此,单例类的扩展有很大的困难。
  • (2)单例类的职责过重,在一定程度上违背了单一职责原则。
  • (3)在一些面向对象语言中,长久未利用会被销毁,导致单例对象丢失

适用环境

  • (1)系统只需要一个实例对象,例如系统要求提供一个唯一的序列号生成器或资源管理器,或者因为资源消耗太大而只允许创建一个对象。
  • (2)用户调用类的单个实例只允许使用一个公共访问点,除了该公共访问点,不能通过其他途径访问该实例。
分享到:
设计模式-适配器模式
设计模式-原型模式
  • 文章目录
  • 站点概览
欢

网红 欢

你能抓到我么?

Email RSS
看爆 Top5
  • mac系统版本与Xcode版本有冲突 4,086次看爆
  • JAVA_HOME环境配置问题 3,736次看爆
  • AssetBundle使用 3,504次看爆
  • VSCode配置C++开发环境 3,261次看爆
  • Lua反射 3,137次看爆

Copyright © 2025 欢 粤ICP备2020105803号-1

由 Halo 强力驱动 · Theme by Sagiri · 站点地图