UI 管理框架 - 设计改进

Framework for UI management - Design improvement

我正在编写一个小结构作为处理 Unity3d 项目的 2D GUI 的框架。我有一个名为 "UIManager" 的空游戏对象,上面有 "UIManager" 脚本。 UIManager 是一个Singleton with DontDestroyOnLoad。现在有一个问题,它适用于所有实际目的,但设计明智,我公开向 world/project 的其他人透露我的实现(它是一个单例)。我需要关于如何改进它以便更好地封装它的建议。

为了更好地设计问题,我偶然发现了Service Locator Pattern。现在我更糊涂了。如果我理解正确,我仍然将我的 UIManager 声明为单例,但不是通过 UIManager.GetInstance() 之类的东西获取它的引用...我创建了另一个 "ServiceLocator" 的单例并要求它提供一个实例的UIManager。我看不出它如何改进我的 UIManager class 的封装,它的实现仍然是 public。而且我看不出它对解耦有何帮助。

对这个问题有任何见解吗?你喜欢怎么做?

如果要保留访问权限,请删除 public 静态引用。如果您需要它是因为您的框架依赖于它,那么它可能意味着 public.

您还可以将您的项目设为完整程序集,这样您的 public 成员就可以是内部成员,并且只能从程序集中访问。

您也可以让您的对象使用界面来最小化可访问的内容。

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 不知道 class 的 ISecond 部分。