我正在编写一个小结构,作为处理Unity3d项目的2D GUI的框架。我有一个空的游戏对象叫做#34; UIManager"与" UIManager"脚本就可以了。 UIManager是Singleton DontDestroyOnLoad。现在这是一个问题,它适用于所有实际目的,但设计明智,我公开透露我的实现(它是一个单身)到世界其他地方/项目。我需要建议如何改进它以便更好地封装。
为了更好地设计问题,我偶然发现Service Locator Pattern。现在我更加困惑。如果我正确理解它,我仍然将我的UIManager声明为单身,但不是通过像UIManager.GetInstance()这样的引用来获取它...我创建了另一个" ServiceLocator"并询问它是否是UIManager的一个实例。我不知道它如何改进我的UIManager类的封装,其实现仍然是公开的。而且我不知道它如何帮助解耦。
对此问题的任何见解?你更喜欢这样做吗?
答案 0 :(得分:3)
如果要保留访问权限,请删除公共静态引用。如果你需要它,因为你的框架依赖于它,那么它可能是公开的。
您还可以使项目成为一个完整的程序集,这样您的公共成员就可以是内部成员,只能从程序集中访问。
您还可以让对象使用界面来最小化可访问的内容。
public interface IFirst{ void GetFirstThing(); }
public interface ISecond { void GetSecondThing(); }
public class MyClass:MonoBehaviour, IFirst, ISecond
{
public void GetFirstThing(){}
public void GetSecondThing(){}
}
public class ConsumerForFirstOnly
{
private IFirst first = null;
public ConsumerForFirstOnly(IFirst first)
{
this.first = first;
}
}
现在,您的ConsumerForFirstOnly不知道该类的第三部分。