![](https://csdnimg.cn/release/download_crawler_static/86342132/bg1.jpg)
实验二报告
一、 单例模式
1. 应用场景分析
单例模式(Singleton Pattern)是一种创建型设计模式,能够保证一个类只有一个
实例, 并提供一个访问该实例的全局节点。
从当前的游戏设计来讲,飞机大战中只有一种英雄机且每局游戏只有一架英雄机(尽
管本游戏改编的来源中有多个英雄机,本实验大概是为了简化功能所以限定只能有一
种英雄机,参考:全民飞机大战)。
而在只允许有一个实例的情况下,原本实验一的代码却存在同时实例化多个英雄机的
可能,这是和我们期望不符的,所以需要使用单例模式来约束这个类最多只能有一个
对象被实例化。
单例模式常用的设计方案有饿汉式、懒汉式和双重检查锁定,本人采用的是双重锁实
现的单例模式。
2. 解决方案
AbstractFlyingObject 是所有飞行物品的抽象父类,用于设计飞行物品基本的方法
和属性,直接继承其的子类有 AbstractAircraft 和 BaseBullet;
AbstractAircraft 是飞行器的抽象父类,直接继承其的子类有 HeroAircraft 和
AbstractEnemy;
HeroAircraft 是英雄机类,但我们限定该类只能有一个实例,故使用单例模式,将
构造函数 HeroAircraft(int,int,int,int,int)设定为私有,只能由静态方法
getHeroAircraft()来实例化对象,同时其中的双重锁限定了对象只能被创建一次,
避免了潜在的多次创建英雄机的可能性。
该类中关键属性为 heroAircraft,实际上就是英雄机实例的引用,设置为私有确保
了只能由关键方法 getHeroAircraft 来获取实例,而关键方法中的双重锁:
1. 引用为空的时候才可能进行创建,非空引用则直接返回 heroAircraft 引用;
2. 当引用为空的时候,确保只有一个线程的类能创建实例,避免多线程产生多个
实例。
uml 类图如下所示:
评论0