经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » Java相关 » 设计模式 » 查看文章
设计模式系列 - 单例模式
来源:cnblogs  作者:hippieZhou  时间:2018/12/10 9:42:08  对本文有异议

单例模式就是指单例类在一定的生命周期内只能有一个对象实例,单例类的创建必须是本身,并能给使用者提供自身。

介绍

在现实世界中,每个生命体都可以被看做是一个单例对象,唯一且具体,具有不可复制性。同样的,在软件开发领域中,有时我们需要保证客户端在当前的客户机上只能运行一个实例这个时候,我们就应该考虑使用单例模式来实现这种业务场景。

类图描述

代码实现

1、懒汉式,线程不安全

  1. public class SingleObject
  2. {
  3. private static SingleObject _instance;
  4. private SingleObject()
  5. {
  6. }
  7. public static SingleObject GetInstance() => _instance ?? (_instance = new SingleObject());
  8. public void ShowMessage()
  9. {
  10. Console.WriteLine("Hello World");
  11. }
  12. }

2、懒汉式,线程安全

  1. public class SingleObject
  2. {
  3. private static SingleObject _instance;
  4. private static readonly object _locker = new object();
  5. private SingleObject()
  6. {
  7. }
  8. public static SingleObject GetInstance()
  9. {
  10. if (_instance == null)
  11. {
  12. lock (_locker)
  13. {
  14. if (_instance == null)
  15. {
  16. _instance = new SingleObject();
  17. }
  18. }
  19. }
  20. return _instance;
  21. }
  22. public void ShowMessage()
  23. {
  24. Console.WriteLine("Hello World");
  25. }
  26. }

3、静态内部类延迟加载

  1. public class SingleObject
  2. {
  3. public static SingleObject GetInstance() => Nested.Instance;
  4. private sealed class Nested
  5. {
  6. static Nested()
  7. {
  8. }
  9. internal static readonly SingleObject Instance = new SingleObject();
  10. }
  11. public void ShowMessage()
  12. {
  13. Console.WriteLine("Hello World");
  14. }
  15. }

4、上层调用

  1. class Program
  2. {
  3. static void Main(string[] args)
  4. {
  5. SingleObject.GetInstance().ShowMessage();
  6. Console.ReadKey();
  7. }
  8. }

总结

对于单例模式,较为好理解,如果需要保持对象的唯一性,则可以考虑使用这种模式进行解决。

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号