设计模式-单例模式(Singleton)

9 篇文章 0 订阅
9 篇文章 0 订阅

设计模式-单例模式(Singleton)

定义

“确认类只有一个对象,并提供一个全局的方法来获取这个对象。”

实现

单例模式在实现时,需要程序设计语言的支持,只要具有静态类属性、静态类方法和重新定义类构造函数存取层级(构造函数支持变更为private);
实现思路需要确认两点,也是定义中的两点:
(1) 同一时间只能存在一个对象;
(2)提供一个快速获取这个对象的方法;

代码

using UnityEngine;

//单例模式-继承mono的写法
public class Singleton_UnitTest : MonoBehaviour {

    public static Singleton_UnitTest Instance;

    void Awake()
    {
        Instance = this;//需要在Awake里赋值,由于Unity中Awake()函数的运行顺序逻辑,可以保证其他地方引用时不会遇到空引用;
    }
	
}//直接使用"Singleton_UnitTest.Instance"就可以取到该单例

//单例模式-不继承mono写法
public class Singleton
{
    //私有属性的构造函数-!重要!,防止在类外可以新创建此类的实例
    private Singleton()
    {

    }

    private static Singleton _instance;
    public static Singleton Instance//利用属性访问器来实现只创建一次Singleton的对象
    {
        get
        {
            if (_instance == null)
            {
                _instance = new Singleton();//只有Singleton本身才能调用自身的构造函数,可以保证只在此处调用过一次来产生单例对象
            }
            return _instance;
        }
    }
}//直接使用"Singleton.Instance"就可以取到单例

这里使用了两种方法实现单例,
前一种是在unity中继承mono的写法;
后一种是在c#中使用属性访问器来实现单例的写法;

小结

  • 单例模式通过将”类的构造函数私有化“,让类的对象只能在该类中产生,达到有效的控制对象的产生数量的目的,再配合”静态成员属性“来达到可以快速获取这个对象;
  • 单例类要避免滥用
    单例模式好用在于可以方便的获取对象,不必“设置引用”和“传递对象”,但这样容易引起单例的滥用,单例模式违反了“开闭原则OCP”,获取的对象是“实现类”而不是“接口类”,当设计变更或需求增加时,无法将其代替为其他类,修复复杂且麻烦,只能更改原有实现类,也无法满足对“修改关闭”的要求;
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值