【学习日记1】单例模式简单说明

为什么使用单例模式

        很多时候,我们希望一个类只能创建一个对象,以此作为某种“管理器”对全局的属性进行管理。这个时候我们就需要使用单例模式来确保此类只能生成一个对象。

为啥不用静态类代替

        静态类和单例类不同,单例模式的灵活性更高,方法可以被override,因为静态类都是静态方法,所以不能被override。

        而且,静态类仅仅是工具包的存在,同时不能使用多态继承的面向对象特性。如果你希望维护状态信息,或者访问资源时,应该选用单例模式。如果仅希望使用固定写好的工具方法,则直接用静态类好了。

单例模式是什么

        单例模式能够使类只能创建一个对象,在应用整个生命周期内只能存在一个实例。单例模式是一种被广泛使用的设计模式。他有很多好处,能够避免实例对象的重复创建,减少创建实例的系统开销,节省内存。

怎么实现一个简单的单例类

我们假定一个需求:

  制作一个怪物管理器,提供创建怪物,移除怪物的方法。每个怪物都有自己的唯一ID。

       那么我们就可以将这个怪物管理器设置成为一个单例类,对游戏场景内的所有怪物进行管理:

class MonsterManager
    {
        private static MonsterManager instance = new MonsterManager();

        private Hashtable hashtable = new Hashtable();

        private MonsterManager()
        {

        }
        public static MonsterManager Instance
        {
            get
            {
                return instance;
            }
        }
        public void CreateMonster(int id,string name)
        {
            Monster monster = new Monster(id, name);
            hashtable.Add(id, monster);
            Console.WriteLine("已创建名称为{0}的怪物,id为{1}", name, id);
        }

        public void RemoveMonster(int id)
        {
            Monster monster = hashtable[id] as Monster;
            Console.WriteLine("已删除id为{0},名称为{1}的怪物",monster.name , id);
            hashtable.Remove(id);
        }
    }

    分析此代码,其单例模式的实现为以下原理:

1. 成员变量:一个私有的静态自己的类对象,一般命名为instance。

2. 属性构造器:一个公开的访问构造器,仅提供获取instance属性的get方法。

3. 空参数构造函数:一个私有的空参数构造函数,意在断绝外界直接使用默认构造函数创建该类对象。

以上三个因素相互限制,就形成了单例模式。

        

  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值