|
本帖最后由 陌小北 于 2017-5-30 20:52 编辑
看完单例模式的介绍,自然大家都会有这样一个疑问——为什么要有单例模式的?它在什么情况下使用的?从单例模式的定义中我们可以看出——单例模式的使用自然是当我们的系统中某个对象只需要一个实例的情况,例如:操作系统中只能有一个任务管理器,操作文件时,同一时间内只允许一个实例对其操作等,既然现实生活中有这样的应用场景,自然在软件设计领域必须有这样的解决方案了(因为软件设计也是现实生活中的抽象),所以也就有了单例模式了。
代码如下
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;</P>
- <P>namespace _1_单例模式
- {
- public class Singleton
- {
- // 定义一个静态变量来保存类的实例
- private static volatile Singleton instance=null;
- private static readonly object lockHelper = new object();//创建线程锁
- // 定义私有构造函数,使外界不能创建该类实例
- private Singleton()
- {
- }</P>
- <P> /// <summary>
- /// 定义公有方法提供一个全局访问点,同时你也可以定义公有属性来提供全局访问点
- /// </summary>
- /// <returns></returns>
- public static Singleton Instance
- {
- // 如果类的实例不存在则创建,否则直接返回
- get
- {
- if (instance == null)
- {
- lock (lockHelper)
- {
- if(instance==null)
- {
- instance = new Singleton();
- }
- }
-
- }
- return instance;
- }
-
- }</P>
- <P> private string name;
- public string Name
- {
- get { return name; }
- set { name = value; }
- }
- }
- }
- </P>
复制代码 调用单例模式 如下
- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Data;
- using System.Drawing;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using System.Windows.Forms;
- namespace _1_单例模式
- {
- public partial class Form1 : Form
- {
- public Form1()
- {
- InitializeComponent();
- }
- private void Form1_Load(object sender, EventArgs e)
- {
- Singleton c1= Singleton.Instance;
- Singleton c2 = Singleton.Instance;
- c1.Name = "小北c1";
- c2.Name = "小北c2";
- Console.WriteLine(object.ReferenceEquals(c1,c2));
- Console.WriteLine("c1 name={0}",c1.Name);
- Console.WriteLine("c2 name={0}", c2.Name);
- }
- }
- }
复制代码
|
|