手机版

网络单一模式(单一)

时间:2021-11-17 来源:互联网 编辑:宝哥软件园 浏览:

每台计算机可以有几台打印机,但只有一台打印机后台打印程序,以避免两个打印作业同时输出到打印机。每台计算机可以有多张传真卡,但只需一个软件负责管理传真卡,以避免两个传真作业同时传输到传真卡的情况。每台计算机可以有几个通信端口,系统应该集中管理这些通信端口,避免一个通信端口同时被两个请求调用。描述:单例模式单例模式问题解决:(1)单例模式介绍:单例模式需要一个类的实例,并提供一个全局访问点。这就提出了一个问题:如何绕过常规的构造函数,提供一种机制来确保一个类只有一个实例?客户端调用类时,不会考虑类是否只能有一个实例,所以应该是类设计者的责任,而不是类用户的责任。单例模式的特点:(1.1)一个类只有一个实例;(1.2) A类提供全局接入点;(2)单一模式实现;(2.1)简单实现:clipboard

上述实现的优点如下:(1)在对象需要之前,实例不会被初始化。这种实现方法称为“惰性实例化”,避免了程序启动时创建不必要的Singleton。上述实现的缺点如下:(1)这种实现对于多线程环境不安全,可能会实例化多个对象。例如,可能有两个线程判断instance==null,然后创建两个singleton对象,这违背了singleton模式的设计意图。(2.2)安全线程:clipboard

上面的实现确保了在多线程的情况下只创建一个单例对象,但是挂锁增加了额外的开销(2.3)双重锁定clipboard

这个实现对于多线程是安全的。同时,线程不是每次都被锁定,而是只有在判断没有创建对象实例时才被锁定。通过上面第一部分的分析,我们知道在锁定之后,我们必须判断对象是否已经被创建。它解决了线程并发的问题,同时避免了在获取Instance的调用中出现排他锁。它还允许您将实例化延迟到第一次访问对象时。事实上,应用程序很少需要这种类型的实现。在大多数情况下,我们将使用静态初始化。这种方法还有很多缺点:不能实现延迟初始化。(2.4)静态初始化clipboard

在此实现中,将在对类的任何成员的第一次引用时创建一个实例,该引用被标记为密封以防止派生,派生可能会增加实例。此外,变量被标记为只读,这意味着变量只能在静态初始化(这里显示的例子)或类构造函数中分配。它仍然可以用来解决Singleton模式试图解决的两个基本问题:全局访问和实例化控制。公共属性为访问实例提供了全局访问点。此外,由于构造函数是私有的,Singleton类不能在类本身之外实例化;因此,变量是指系统中可能存在的唯一实例。由于Singleton实例是由私有静态成员变量引用的,因此在通过调用实例属性首次引用该类之前,它不会被实例化。这种方法唯一的潜在缺点是,您对实例化机制的控制较少。在“设计模式”表单中,您可以使用非默认构造函数,或者在实例化之前执行其他任务。因为。NET Framework负责初始化在这个解决方案中,您没有这些选项。在大多数情况下,静态初始化是在中实现Singleton的首选方法。NET。(2.5)初始化延迟:clipboard

(3)单例模式的优缺点:clipboard

(4)单例模式下的应用和应用场景:clipboard

(5)具体示例:总结:Singleton设计模式是一种非常有用的机制,可以用来在面向对象的应用程序中提供单一的访问点。

版权声明:网络单一模式(单一)是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。