gpt4 book ai didi

c# - UI 管理框架 - 设计改进

转载 作者:太空宇宙 更新时间:2023-11-03 22:59:09 24 4
gpt4 key购买 nike

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

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

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

最佳答案

如果要保留访问权限,请删除公共(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 不知道该类的 ISecond 部分。

关于c# - UI 管理框架 - 设计改进,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44000851/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com