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,如需转载请自行联系原作者





相关文章
|
9月前
@Singleton和@ApplicationScoped的区别
在JakartaEE的CDI标准中@Singleton和@ApplicationScoped的区别
202 0
|
10月前
|
SQL 缓存 安全
Java枚举单例模式比DCL和静态单例要好?———反编译分析单例枚举类
枚举单例模式比DCL和静态单例模式要好?为什么好呢?本文带你一探究竟!
83 0
Java枚举单例模式比DCL和静态单例要好?———反编译分析单例枚举类
|
存储 设计模式 Java
第18篇:Java的类变量、类方法;static 关键字;静态导入;初始化块;静态初始化块;单例模式
☘️ 被static修饰的成员变量可叫做:类变量、静态变量、静态字段 ☘️ 类变量在程序运行过程中只占用一份固定的内存(存储在方法区) ☘️ 可通过类名访问 ☘️ 可通过引用变量名访问(不推荐)
77 0
第18篇:Java的类变量、类方法;static 关键字;静态导入;初始化块;静态初始化块;单例模式
|
Java 编译器
第19篇:Java 中的 final 关键字、嵌套类、内部类、静态嵌套类、局部类
📝 有效 final:虽然没有被final修饰,但只进行了一次赋值(若被赋值了不止一次,则不是有效 final) 📝 从 Java8 开始,如果局部变量没有被第二次赋值,则该局部变量会被认定为是【有效 final】
114 0
第19篇:Java 中的 final 关键字、嵌套类、内部类、静态嵌套类、局部类
|
设计模式 存储 安全
|
设计模式 存储 安全
C++的单例模式为什么不直接全部使用static,而是非要实例化一个对象?
C++的单例模式为什么不直接全部使用static,而是非要实例化一个对象?
444 1
C++的单例模式为什么不直接全部使用static,而是非要实例化一个对象?
|
设计模式 安全 Java
静态类、静态方法、内部类、匿名内部类、非静态类的一些实践
静态类、静态方法、内部类、匿名内部类、非静态类的一些实践
|
设计模式
使用private构造器 or 枚举的原生语言实现单例
相信接触过设计模式的同学都知道,单例的一种经典实现方式就是private的构造函数,但直到我看到这一章节内容的时候,才突然顿悟原来枚举类型也是可以强化单例属性的,自愧个人的融会贯通能力还有待加强。
|
设计模式 安全 算法
Java单例模式的不同写法(懒汉式、饿汉式、双检锁、静态内部类、枚举)
Java单例模式的不同写法(懒汉式、饿汉式、双检锁、静态内部类、枚举)
135 0