单例】什么是单例模式?为什么要用?

2022-02-09 19:40发布

7条回答
zgtl_20
2楼 · 2022-02-11 09:24

单例模式,是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中,应用该模式的类一个类只有一个实例。即一个类只有一个对象实例

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

从具体实现角度来说,就是以下三点:一是单例模式的类只提供私有的构造函数,二是类定义中含有一个该类的静态私有对象,三是该类提供了一个静态的公有的函数用于创建或获取它本身的静态私有对象。

在下面的对象图中,有一个"单例对象",而"客户甲"、"客户乙" 和"客户丙"是单例对象的三个客户对象。可以看到,所有的客户对象共享一个单例对象。而且从单例对象到自身的连接线可以看出,单例对象持有对自己的引用。

一些资源管理器常常设计成单例模式。

在计算机系统中,需要管理的资源包括软件外部资源,譬如每台计算机可以有若干个打印机,但只能有一个Printer Spooler, 以避免两个打印作业同时输出到打印机中。每台计算机可以有若干传真卡,但是只应该有一个软件负责管理传真卡,以避免出现两份传真作业同时传到传真卡中的情况。每台计算机可以有若干通信端口,系统应当集中管理这些通信端口,以避免一个通信端口同时被两个请求同时调用。

需要管理的资源包括软件内部资源,譬如,大多数的软件都有一个(甚至多个)属性(properties)文件存放系统配置。这样的系统应当由一个对象来管理一个属性文件。

需要管理的软件内部资源也包括譬如负责记录网站来访人数的部件,记录软件系统内部事件、出错信息的部件,或是对系统的表现进行检查的部件等。这些部件都必须集中管理,不可整出多头。

这些资源管理器构件必须只有一个实例,这是其一;它们必须自行初始化,这是其二;允许整个系统访问自己这是其三。因此,它们都满足单例模式的条件,是单例模式的应用。



单例模式,属于创建类型的一种常用的软件设计模式。通过单例模式的方法创建的类在当前进程中只有一个实例(根据需要,也有可能一个线程中属于单例,如:仅线程上下文内使用同一个实例)定义数学与逻辑学中,singleton定义为“有且仅有一个元素的集合”

摩羯摩羯
4楼 · 2022-02-15 16:54

网站易用性是用户体验的一个重要方面,但往往网站建设者会沉溺于自己的思维习惯,而造成用户使用的不畅。这个课题不仅是专业UI/UE人员需要研究的,对于网站运营人员更应该了解一定的方法去检验和提升网站的易用性。

回答: 2022-02-15 16:54

网站易用性是用户体验的一个重要方面,但往往网站建设者会沉溺于自己的思维习惯,而造成用户使用的不畅。这个课题不仅是专业UI/UE人员需要研究的,对于网站运营人员更应该了解一定的方法去检验和提升网站的易用性。

py大白
5楼 · 2022-02-17 14:36

       单例模式的要点有三个;一是某个类只能有一个实例;二是它必须自行创建这个实例;三是它必须自行向整个系统提供这个实例。从具体实现角度来说,就是以下三点:一是单例模式的类只提供私有的构造函数,二是类定义中含有一个该类的静态私有对象,三是该类提供了一个静态的公有的函数用于创建或获取它本身的静态私有对象。

在下面的对象图中,有一个"单例对象",而"客户甲"、"客户乙" 和"客户丙"是单例对象的三个客户对象。可以看到,所有的客户对象共享一个单例对象。而且从单例对象到自身的连接线可以看出,单例对象持有对自己的引用。一些资源管理器常常设计成单例模式。


1.一是,解决多线程并发访问的问题。

2.二是节约系统内存,提交系统运行的效率,提高系统性能。


小光光321
7楼 · 2022-02-27 09:46

一是解决多线程并发访问的问题。

二是节约系统内存,提交系统运行的效率,提高系统性能。


小小123
8楼 · 2022-03-31 10:41

1.一是,解决多线程并发访问的问题。

2.二是节约系统内存,提交系统运行的效率,提高系统性能。



回答: 2022-04-08 13:48

一是解决多线程并发访问的问题。

二是节约系统内存,提交系统运行的效率,提高系统性能。


相关问题推荐

  • 回答 8

    利用枚举的特性,让JVM来帮我们保证线程安全和单一实例

  • 回答 4

    在我看来,单例模式可以避免资源空间的浪费,只有一个实例,并且她自己负责创建自己的对象,这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。...

  • 回答 5

    多线程中,单例模式并非线程安全,即便是加上了synchronized关键字

  • 回答 6

    1.         单例模式和多例模式属于对象模式。2.         单例模式的对象在整个系统中只有一份,多例模式可以有多个实例。3.         它们都不对外提供构造方法,即构造方法都为私有。...

  • 回答 6

    经典版单例模式public class Singleton {        private static Singleton uniqueInstance;//利用一个静态常量来记录singleton类的唯一实例。     private Singleton() {     }     public static  Singleton getInstance()...

没有解决我的问题,去提问