C# 单例设计模式
2017-09-09 11:18
253 查看
什么是单例设计模式?
简单来说单例设计模式就是确保一个类只有一个实例 (类的实例对象在类的内部生成)
为什么要有单例设计模式?
单例模式是资源管理的必备模式,保证一个类只有一个实例,并且这个实例易于被访问。
如何实现单例设计模式?
1.构造方法设为private
2.内建静态实例
3.静态构造方法给实例做初始化
C#中 简历单例
C# 建立泛型单例
例:
Unity 设计单例
简单来说单例设计模式就是确保一个类只有一个实例 (类的实例对象在类的内部生成)
为什么要有单例设计模式?
单例模式是资源管理的必备模式,保证一个类只有一个实例,并且这个实例易于被访问。
如何实现单例设计模式?
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;
}
}
}任何继承了泛型单例的类都是单例
相关文章推荐
- [导入]C#面向对象设计模式纵横谈(24):(行为型模式) Visitor 访问者模式.zip(10.41 MB)
- C#设计模式之六适配器模式(Adapter Pattern)【结构型】
- 201802272238->深入浅出设计模式:c#模板模式
- C#设计模式之十九策略模式(Stragety Pattern)【行为型】
- C#设计模式总结
- [用设计模式锻炼C#系列]之Strategy
- 推荐C#设计模式网址
- 《模式——工程化实现及扩展》(设计模式C# 版)《中介者模式 Mediator》——“自我检验" 参考答案
- 设计模式的实际应用——在C#中解决单客户端窗口数据并发问题
- 设计模式之C#实现(一)--AbstractFactory(补)
- C#设计模式(7)——适配器模式(Adapter Pattern)
- [C#]设计模式-工厂方法-创建型模式
- Singleton设计模式的C#实现(下)
- C#设计模式——适配器模式(Adapter Pattern)
- C#设计模式--建造者模式
- 乐在其中设计模式(C#) - 代理模式(Proxy Pattern)
- 《模式——工程化实现及扩展》(设计模式C# 版)《模板方法模式 Template》——“自我检验"
- 设计模式C#
- C#设计模式(2)——简单工厂模式
- C# 设计模式-工场方法模式