上一篇文章中說到的manager of managers,其中每個manager都是單例的實現(xiàn),當(dāng)然也可以使用靜態(tài)類實現(xiàn),但是相比于靜態(tài)類的實現(xiàn),單例的實現(xiàn)更為通用,可以適用大多數(shù)情況。如何設(shè)計這個單例的模板?
??先分析下需求,當(dāng)設(shè)計一個manager時候,我們希望整個程序只有一個該manager對象實例,一般馬上能想到的實現(xiàn)是這樣的:
public class XXXManager {
private static XXXManager instance = null;
private XXXManager {
// to do ...
}
public static XXXManager() {
if (instance == null)
{
instance = new XXXManager();
}
return instance;
}
}
如果一個游戲需要10個各種各樣的manager,那么以上這些代碼要復(fù)制粘貼好多遍。重復(fù)的代碼太多!!!想要把重復(fù)的代碼抽離出來,怎么辦?答案是引入泛型。實現(xiàn)如下:
using System;
using System.Collections.Generic;
using System.Text;
using System.Reflection;
namespace QFramework {
public abstract class QSingleton<T> where T : QSingleton<T>
{
protected static T instance = null;
protected QSingleton()
{
}
public static T Instance()
{
if (instance == null)
{
// 如何new 一個T???
}
return instance;
}
}
}