您的位置:首页 > 编程语言 > C#

C# 单例设计模式

2017-09-09 11:18 253 查看
什么是单例设计模式?

简单来说单例设计模式就是确保一个类只有一个实例   (类的实例对象在类的内部生成)

为什么要有单例设计模式?

单例模式是资源管理的必备模式,保证一个类只有一个实例,并且这个实例易于被访问。

如何实现单例设计模式?

1.构造方法设为private

2.内建静态实例

3.静态构造方法给实例做初始化

C#中 简历单例

public class Singleton{
//内建静态实例
private static Singleton m_singleton;
//构造函数被私有化,那么其他的类就无法使用这个构造函数,那么当然无法创建相应对象了
private Singleton();
//用属性的Get方法获取类的实例对象
public static Singleton Instance{
get{
//判断类的对象实例是否为空
if (m_singleton == null)
{
//实例化类的对象
m_singleton = new Singleton();
}
return m_singleton;
}
}
}


C#  建立泛型单例

public class Singleton<T> where T:class
{
//内建静态实例
private static T t;
//构造函数被私有化,那么其他的类就无法使用这个构造函数,那么当然无法创建相应对象了
private Singleton();
//用属性的Get方法获取类的实例对象
public static Singleton Instance{
get{
//判断类的对象实例是否为空
if (t == null)
{
//实例化类的对象
t = new Singleton();
}
return t;
}
}
}
你需要做成 单例的 类

例:

public class SingletonTest:Singleton<SingletonTest>
{
public string name;
public int age;
public string job;
}
在其他类中使用可以直接用类名索引出字段或方法

Unity 设计单例

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class MonoSingleton{
//内建静态实例
private static MonoSingleton monoSing;
public static MonoSingleton Instance{
get{
//在游戏场景中寻找挂有 MonoSingleton 脚本的游戏物体
monoSing=GameObject.FindObjectOfType(typeof(MonoSingleton)) as MonoSingleton;
//判断是否找到这个 MonoSingleton 这个脚本组件
if (monoSing == null) //如果场景中没有找到 MonoSingleton 这个组件
{
//新建一个物体来挂载 MonoSingleton 这个脚本组件
GameObject go=new GameObject();
monoSing = go.AddComponent<MonoSingleton>();
}
//保证了一个类只有一个对象实例
return monoSing;
}
}
}
unity 中 泛型单例(把前面的类改为泛型类)

public class MonoSingleton<T>:Monobehaviour where T:Component{
//内建静态实例
private static T monoSing;
public static T Instance{
get{
//在游戏场景中寻找挂有 MonoSingleton 脚本的游戏物体
monoSing=GameObject.FindObjectOfType(typeof(T)) as T;
//判断是否找到这个 MonoSingleton 这个脚本组件
if (monoSing == null) //如果场景中没有找到 MonoSingleton 这个组件
{
//新建一个物体来挂载 MonoSingleton 这个脚本组件
GameObject go=new GameObject();
monoSing = go.AddComponent<T>();
}
//保证了一个类只有一个对象实例
return monoSing;
}
}
}任何继承了泛型单例的类都是单例
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: