公司的类都需要使用单例模式实现,这个可以节省资源,避免重复对象的生成。但是静态类也可以做到这一点,而且写起来更简洁,于是查阅相关资料,希望弄明白两者的差别。

1.单例模式可以在用到的时候初始化,而静态类会在程序开始运行时初始化?

通过自己的实践,我认为这个说法是不对的。我写了下面的例子进行实验。

    class Program
{
static void Main(string[] args)
{ Console.WriteLine(Class1.get(190));
GC.Collect();
Console.ReadKey();
}
}
    public static class Class1
{
public static int[] arr = new int[20480000]; static Class1()
{
for (int i = 1; i < arr.Length; i++)
{
arr[i] = i;
}
} public static int get(int i)
{
return arr[i];
}
}

程序进入主函数时,内存是这样的

显然静态类中的arr没有被初始化,继续执行

  

可以看到这时静态类的arr被初始化了,而且arr值全部为0时,内存并没有变化,难道是微软做了优化?

2.GOF对单件的第一句场景解释就是“如果需要唯一实例”?

额,静态类难道不是唯一实例么?

3.单例模式,解耦?

public interface IHelloWorld
{
string HelloWorld();
} //然后是接口的两个实现.
public class HelloWorldEnglish : IHelloWorld
{
string IHelloWorld.HelloWorld()
{
return "Hello World !";
}
}
public class HelloWorldChinese : IHelloWorld
{
string IHelloWorld.HelloWorld()
{
return "您好 世界 !";
}
} public class People
{
private readonly IHelloWorld peopleHelloWorld;
public People(IHelloWorld helloWorld)
{
this.peopleHelloWorld = CreateSingle()
//这里你可以使用单例模式创建出来HelloWorldEnglish 或 HelloWorldChinese
}
public void SayHello()
{
Console.WriteLine(this.peopleHelloWorld.HelloWorld());
}
}

这个代码我看完了愣是没明白解耦和单例啥关系,倒是明白了接口解耦挺好的(手动笑哭),下面大侠观点与我相同,但还是没有解开我的疑团

4.单例可以有继承,实现接口,而静态类不能

这个观点我比较赞同,如果想使用单例,又想松耦合,就用单例模式吧。

静态类比较适合工具类。


参考链接:

https://bbs.csdn.net/topics/390487790

https://www.cnblogs.com/zhangzt/p/4350556.html

https://bbs.csdn.net/topics/390825682

https://www.xin3721.com/ArticlecSharp/c13696.html

C# 静态类 单例模式 对比的更多相关文章

  1. Java单例模式(Singleton)以及实现

    一. 什么是单例模式 因程序需要,有时我们只需要某个类同时保留一个对象,不希望有更多对象,此时,我们则应考虑单例模式的设计. 二. 单例模式的特点 1. 单例模式只能有一个实例. 2. 单例类必须创建 ...

  2. Java实现单例模式的9种方法

    一. 什么是单例模式 因程序需要,有时我们只需要某个类同时保留一个对象,不希望有更多对象,此时,我们则应考虑单例模式的设计. 二. 单例模式的特点 1. 单例模式只能有一个实例. 2. 单例类必须创建 ...

  3. Android-Java单例模式

    今天我们来说说一个非常常用的模式,单例模式,单例模式让某个类中有自己的实例,而且只实例化一次,避免重复实例化,单例模式让某个类提供了全局唯一访问点,如果某个类被其他对象频繁使用,就可以考虑单例模式,以 ...

  4. Java公开课-06.单例

    一. 什么是单例模式 因程序需要,有时我们只需要某个类同时保留一个对象,不希望有更多对象,此时,我们则应考虑单例模式的设计. 二. 单例模式的特点 1. 单例模式只能有一个实例. 2. 单例类必须创建 ...

  5. Java 设计模式之单利模式

    一.首先介绍一下单例模式:     单例模式(Singleton),也叫单子模式,是一种常用的软件设计模式.在应用这个模式时,单例对象的类必须保证只有一个实例存在.许多时候整个系统只需要拥有一个的全局 ...

  6. C# 学习——静态(第四天)

    一.命名空间 类似于文件夹,而类就是文件夹中的文件: 作用:明确的指向我们所需要的类的 所在的位置: 统一命名空间下,类名不能重复. 二.类 概念:具有相同属性和功能的对象的抽象的集合. 三.静态与实 ...

  7. 花了30天才肝出来,史上最全面Java设计模式总结,看完再也不会忘

    本文所有内容均节选自<设计模式就该这样学> 序言 Design Patterns: Elements of Reusable Object-Oriented Software(以下简称&l ...

  8. java中的单例模式与静态类

    单例模式与静态类(一个类,所有方法为静态方法)是另一个非常有趣的问题,在<Java中有关单例模式的面试问题>博文中露掉了,由于单例模式和静态类都具有良好的访问性,它们之间有许多相似之处,例 ...

  9. 设计模式 - Java中单例模式的6种写法及优缺点对比

    目录 1 为什么要用单例模式 1.1 什么是单例模式 1.2 单例模式的思路和优势 2 写法① - 饥饿模式 2.1 代码示例 2.2 优缺点比较 3 写法② - 懒惰模式 3.1 代码示例 3.2 ...

随机推荐

  1. python sqlite3增加表字段

    给sqlite3表格增加新字段,要注意大小写,要不然不成功. 一开始这样写,不成功! 后面规范写,按大小写严格规范写! 成功了!现在查看新增加的字段commit: 仔细看,这下全部小写,括表名称.co ...

  2. kubernets之从应用访问pod元数据以及其他资源

    一  downwardAPI的应用 1.1  前面我们介绍了如何通过configmap以及secret将配置传入到pod的容器中,但是传递的这些都是预先能够安排和只晓得,对于那些只有当pod创建起来之 ...

  3. xray—学习笔记

    长亭xray扫描器 简介 xray (https://github.com/chaitin/xray) 是从长亭洞鉴核心引擎中提取出的社区版漏洞扫描神器,支持主动.被动多种扫描方式,自备盲打平台.可以 ...

  4. Java高并发与多线程(三)-----线程的基本属性和主要方法

    今天,我们开始Java高并发与多线程的第三篇,线程的基本属性和主要方法. [属性] 编号(ID) 类型long 用于标识不同的线程,编号唯一,只存在java虚拟机的一次运行 名称(Name) 类型St ...

  5. 【小菜学网络】交换机与MAC地址学习

    上一小节介绍了 集线器 ,一种工作于物理层的简单网络设备.由于集线器采用广播的方式中继.转发物理信号,传输效率受到极大制约. 精准转发 为了解决集线器工作效率低下的尴尬,我们需要设计一种更高级的网络设 ...

  6. 使用bandit对目标python代码进行安全函数扫描

    技术背景 在一些对python开源库代码的安全扫描中,我们有可能需要分析库中所使用到的函数是否会对代码的执行环境造成一些非预期的影响.典型的例如python的沙箱逃逸问题,通过一些python的第三方 ...

  7. 记录list.remove()和list.pop()

    list.remove(obj):这个是移除列表中某个值的第一个匹配项 list.pop(index):这个是移除列表中下标为index的元素 当元素全是数字或者有数字时注意区分.

  8. JMeter性能测试9:阿里云服务器压测

    第一步准备好jmeter脚本 第二步 将本地的jmeter脚本上传到阿里云进行验证 检验阿里云的jmeter是否能正常运行 将本地的脚本上传到阿里云使用xshell进入到该目录下 使用命令运行刚才上传 ...

  9. 手写Netty之多路复用Select小案例

    注意:本文只是将上文多路复用器Select.Poll.Epoll区别梳理中提出的概念与Netty中的步骤联系起来,方便后面回顾,代码中注释很多,对于大家来说如果不是怀有同样的目的,不一定有用. 单线程 ...

  10. JavaScript 实现排序算法

    参考文章: 十大经典排序算法动画,看我就够了! 1. 冒泡排序 思路 比较所有相邻元素,如果第一个比第二个大,则交换它们 一轮下来,可以保证最后一个数是最大的 执行n-1轮,就可以完成排序 代码 Ar ...