最近在我的Unity项目中,我发现要创建一个更模块化的应用程序,它有助于在类中包含一个静态List,该类包含对所有或部分创建的对象的引用,以便可以从其他部分轻松访问它们该计划。一个例子如下:
private static List<Canvas> availableCanvases = new List<Canvas>();
void Start () {
availableCanvases.Add(this);
}
public static void AddComponentToCanvas(Transform component) {
for (int i = 0; i < availableCanvases; i++) {
//Make sure the canvas still exists
if (availableCanvases[i] != null) {
component.SetParent(availableCanvases[i]);
return;
} else {
availableCanvases.RemoveAt(i);
i--;
}
}
//Reached if no canvas found
//Create new canvas or create error etc...
}
这只是允许在运行时实例化的对象将自己添加到可用的画布,而不需要通过findWithTag或findWithType方法访问它,如果使用太多会损害性能。
这是不好的做法还是好的?我的同事认为这代表单例编程,但它当然不是因为它允许存在多个对象并被使用。
答案 0 :(得分:8)
这基本上是一个基于Singleton模式的Service Locator“Anti Pattern”(惊喜)。但是,您正在检索对象实例,而不是检索服务实例。
无论名称如何,这实际上都不会创建更模块化的应用程序。相反,您在整个应用程序中创建了硬依赖关系,这使得将它拆分为相应的组件变得更加困难。
Martin Fowler很好地记录了这种模式。您可以找到更多信息here。