开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 2339|回复: 0
收起左侧

[C#图文教程] 大北设计模式之单例模式

[复制链接]
结帖率:100% (2/2)
发表于 2017-5-30 20:42:42 | 显示全部楼层 |阅读模式   湖北省黄冈市
本帖最后由 陌小北 于 2017-5-30 20:52 编辑

看完单例模式的介绍,自然大家都会有这样一个疑问——为什么要有单例模式的?它在什么情况下使用的?从单例模式的定义中我们可以看出——单例模式的使用自然是当我们的系统中某个对象只需要一个实例的情况,例如:操作系统中只能有一个任务管理器,操作文件时,同一时间内只允许一个实例对其操作等,既然现实生活中有这样的应用场景,自然在软件设计领域必须有这样的解决方案了(因为软件设计也是现实生活中的抽象),所以也就有了单例模式了。

代码如下
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;</P>
  6. <P>namespace _1_单例模式
  7. {
  8.     public class Singleton
  9.     {
  10.         // 定义一个静态变量来保存类的实例
  11.         private static volatile Singleton instance=null;
  12.         private static readonly object lockHelper = new object();//创建线程锁
  13.         // 定义私有构造函数,使外界不能创建该类实例
  14.         private Singleton()
  15.         {
  16.         }</P>
  17. <P>        /// <summary>
  18.         /// 定义公有方法提供一个全局访问点,同时你也可以定义公有属性来提供全局访问点
  19.         /// </summary>
  20.         /// <returns></returns>
  21.         public static Singleton Instance
  22.         {
  23.             // 如果类的实例不存在则创建,否则直接返回
  24.             get
  25.             {
  26.                 if (instance == null)
  27.                 {
  28.                     lock (lockHelper)
  29.                     {
  30.                         if(instance==null)
  31.                         {
  32.                             instance = new Singleton();
  33.                         }
  34.                     }
  35.                   
  36.                 }
  37.                 return instance;
  38.             }
  39.            
  40.         }</P>
  41. <P>        private string name;
  42.         public string Name
  43.         {
  44.             get { return name; }
  45.             set { name = value; }
  46.         }
  47.     }
  48. }
  49. </P>
复制代码
调用单例模式 如下

  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. using System.Windows.Forms;

  10. namespace _1_单例模式
  11. {
  12. public partial class Form1 : Form
  13. {
  14. public Form1()
  15. {
  16. InitializeComponent();
  17. }

  18. private void Form1_Load(object sender, EventArgs e)
  19. {
  20. Singleton c1= Singleton.Instance;
  21. Singleton c2 = Singleton.Instance;
  22. c1.Name = "小北c1";
  23. c2.Name = "小北c2";

  24. Console.WriteLine(object.ReferenceEquals(c1,c2));
  25. Console.WriteLine("c1 name={0}",c1.Name);
  26. Console.WriteLine("c2 name={0}", c2.Name);
  27. }
  28. }


  29. }
复制代码



您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表