今天学习的是Singleton模式,又称单例模式,这种模式是方便在开发游戏的时候,我们可以快速的去访问一些对象。而游戏中的有些对象是唯一的或者数量是有限制的,比如游戏的总控制系统。而Singleton模式的一个定义就是:确认类只有一个对象,并提供一个全局的方法来获取这个对象。其符合两个特质:(1)同时间只存在一个对象,当然有时候对象的数量是限定的,但是不一定唯一;(2)提供一个快速获取这个对象的方法。一般单例模式的实现范例如下(C#版)
public class Singleton
{
public static Singleton _instance;
public static Singleton Instance
{
get{
if(_instance==null){
_instance=new Singleton();
}
return _instance;
}
}
private Singleton(){}
}
一般我们在类中定义一个Singleton类的“静态属性成员”_instance,并定义一个static 方法来获取_instance属性。这里使用了C#中的getter方法来实现Instance方法。
但是有时候因为Singleton模式可以快速访问对象,会在游戏制作中,出现滥用Singleton模式的情况。深入思考的话,Singleton模式其实违法了设计模式中的“开闭原则”。因为通过Instance方法获取对象是通过“实现类”而不是“接口类”。所以很多时候我们会用一些其他的方法来代替Singleton模式:(1)让类具有计数功能来限制对象的数量,限制数量,这是Singleton模式的一个特性。所以我们如果只是想实现这个特质的话,就可以使用计数器;(2)指定类的静态成员。这种方法可以很快速的访问一些类。将要访问的类当做参数一样传进要调用的类中。