Singleton和静态类的区别

简介:

参阅本帖:

http://topic.csdn.net/u/20110611/14/B02F8E18-3571-4644-8C57-EFF2106AED1C.html

前些天在MS Press的一本名为C#编程导论中看到了一个概念:单体型。初读其定义,感到甚为不解,定义为,一个类只能实例化一次,并且提供一个全局访问点,它的典型实现手段是声明private类型的构造函数和static类型的方法。 
        当时我就产生了两个困惑:1、如果构造函数为private类型的话怎么可能实例化呢?2、何为全局访问点。经过查看资料和同事沟通,我产生了我对单体型的理解:“我感觉单体型其实是不生成实例的,因为书上说实现单体型的一种典型的方法是使用private类型的构造函数和static类型的方法。这样的话就不能够对这个类进行实例化,而调用它的方法也只能通过类名来调用(可能就是所谓的全局访问点吧)。” 
         我将我的理解发给了我的一个朋友(我称之为“老大”的C# 牛人),结果他说我把静态类和设计模式中的singleton模式弄混了。经过他的讲解和我的重新认识,我发现尽管两者有些地方很相似,但本质是不一样的。 
         首先,designpattern中的singleton是一种设计模式(废话,但我是初学者,还望理解,呵呵),它提供的是一种解决实际问题的设计方案。基本上我们可以通过如下两种方式来实现singleton: 
1、 
public class Singleton 

     private static Singleton instance = new Singleton(); 
     private Singleton() {} 
     public static Singleton Instance() 
    { 
     return instance; 
     } 
}//通过第一次调类(调用类的静态函数Instance()来获取实例化后的对象)就实例化了此类的唯一一个对象,由于是静态的也就保证了只实例化一次。 
2、第二种方式是将new操作放在了Instance()方法中进行,实际上没有什么本质上的区别。 
      其次是静态类的问题,静态类与singleton最大的区别是静态类根本就不实例化,就这一点上跟抽象类是一致的。但也有所区别,抽象类是可以有实例成员的,而静态类没有;抽象类存在的唯一目的就是被继承,而静态类根本就不能被继承(static sealed class MyClass)。
















本文转自cnn23711151CTO博客,原文链接: http://blog.51cto.com/cnn237111/585875,如需转载请自行联系原作者





相关文章
|
3月前
|
安全 Java
synchronized修饰普通方法和静态方法的区别
在Java多线程中,`synchronized`关键字用于同步机制,确保线程安全。修饰普通方法时,同步基于对象实例,仅同步访问同一对象的方法调用,不同对象间互不影响。修饰静态方法时,则基于类级别,所有对象访问同一静态方法时会互相阻塞。前者适合保护对象状态,后者适用于类级资源同步。需注意,修饰静态方法可能会影响并发性能。实际应用中应根据需求选择适当的同步策略,以平衡程序正确性和效率。
|
2月前
|
存储 C# 开发者
C#一分钟浅谈:静态成员与静态类介绍
在C#编程中,`static`关键字用于创建静态字段、方法、属性和构造函数等,这些成员属于类本身而非实例。本文从基本概念入手,详细探讨了静态成员与静态类的特点、应用场景及常见误区。通过示例代码展示了如何使用静态字段和方法,并讨论了静态类的定义及其在工具箱和常量集合中的应用。最后总结了正确使用这些特性的策略,以帮助开发者编写高效、可维护的代码。
68 11
|
3月前
|
设计模式 安全 IDE
C++从静态类型到单例模式
C++从静态类型到单例模式
35 0
|
5月前
|
存储 Java Kotlin
Kotlin中的嵌套类、内部类、枚举类、密封类、数据类、单例类、伴生对象
Kotlin中的嵌套类、内部类、枚举类、密封类、数据类、单例类、伴生对象
|
6月前
|
编译器 C++
【C++】类与对象(static、explicit、友元、隐式类型转换、内部类、匿名对象)
【C++】类与对象(static、explicit、友元、隐式类型转换、内部类、匿名对象)
32 2
静态内部类,实例内部类
我们创建了静态内部类,那么我们怎么能获取静态内部类对象呢? 这里我们知道静态变量是不依赖于对象的,所以不用先new一个Outclass1对象(讲到实例内部类会用),可以直接new OutClass.InnerClass()。
71 0
|
SQL 缓存 安全
Java枚举单例模式比DCL和静态单例要好?———反编译分析单例枚举类
枚举单例模式比DCL和静态单例模式要好?为什么好呢?本文带你一探究竟!
115 0
Java枚举单例模式比DCL和静态单例要好?———反编译分析单例枚举类
|
缓存 安全 Java
静态内部类单例
静态内部类单例
104 0
@Singleton和@ApplicationScoped的区别
在JakartaEE的CDI标准中@Singleton和@ApplicationScoped的区别
404 0
|
设计模式 存储 安全