Jimmypony的技术汇总区
很多都不会,很多都不懂,不要浮躁,静心学习
posts - 51,comments - 22,views - 75074

单件模式:

显而易见,单件模式就是只有一个,并且通过私有构造器的方式不能被继承(继承了就不是正真意义上的单件了),在这一点上和静态类是一致的,但是还是有区别的主要是以下2点:

  1. 初始化时间,静态类在编译时初始化,单件类在需要时再初始化
  2. 静态类没有构造器,但是单件有一个一次性的构造器,可以根据不同情况进行一次性的复杂构造

当某个类并不需要由构造器初始化并且不在乎初始化的时间时,2者可以混用!

以下是单件模式的Demo:

 

复制代码
 1    /// <summary>
 2    /// 简单的单件模式
 3    /// </summary>

 4    public class Singleton
 5    {
 6        private string name;
 7        private int age;
 8        private static Singleton sin = null;
 9
10        //私有构造器
11        private Singleton(string name,int age) 
12        {
13            this.name = name;
14            this.age = age;
15        }

16
17        public static Singleton GetSingleton(string name, int age) 
18        {
19            if (sin == null)
20                sin = new Singleton(name,age);
21            return sin;
22        }

23
24        public void ShowInfo()
25        {
26            Console.WriteLine(string.Format(@"你好,我是单件,我叫{0},年龄:{1}岁", name, age));
27        }

28    }

29
30
31    class Program
32    {
33        static void Main(string[] args)
34        {
35            Singleton sin = Singleton.GetSingleton("王老五",55);
36            //第二次无效了
37            Singleton sin2 = Singleton.GetSingleton("比尔 盖兹",45);
38
39            if (sin.Equals(sin2))
40                Console.WriteLine("我们两个是相同的实例!");
41            else
42                Console.WriteLine("我们两个是不相同的实例!");
43
44            sin.ShowInfo();
45            sin2.ShowInfo();
46            Console.Read();
47        }

48    }
复制代码

 


posted on   Jim~  阅读(272)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端
< 2008年9月 >
31 1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 1 2 3 4
5 6 7 8 9 10 11

点击右上角即可分享
微信分享提示