UI管理框架 - 设计改进

时间:2017-05-16 11:59:18

标签: c# unity3d design-patterns singleton service-locator

我正在编写一个小结构,作为处理Unity3d项目的2D GUI的框架。我有一个空的游戏对象叫做#34; UIManager"与" UIManager"脚本就可以了。 UIManager是Singleton DontDestroyOnLoad。现在这是一个问题,它适用于所有实际目的,但设计明智,我公开透露我的实现(它是一个单身)到世界其他地方/项目。我需要建议如何改进它以便更好地封装。

为了更好地设计问题,我偶然发现Service Locator Pattern。现在我更加困惑。如果我正确理解它,我仍然将我的UIManager声明为单身,但不是通过像UIManager.GetInstance()这样的引用来获取它...我创建了另一个" ServiceLocator"并询问它是否是UIManager的一个实例。我不知道它如何改进我的UIManager类的封装,其实现仍然是公开的。而且我不知道它如何帮助解耦。

对此问题的任何见解?你更喜欢这样做吗?

1 个答案:

答案 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不知道该类的第三部分。