首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UI管理框架-设计改进

UI管理框架-设计改进
EN

Stack Overflow用户
提问于 2017-05-16 11:59:17
回答 1查看 132关注 0票数 1

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

为了更好地设计这个问题,我偶然发现了服务定位器模式。现在我更困惑了。如果我正确地理解了它,我仍然声明我的UIManager为单例,但不是通过类似UIManager.GetInstance()之类的东西获得它的引用。我创建了"ServiceLocator“的另一个Singleton,并要求它提供一个UIManager实例。我看不出它如何改进我的UIManager类的封装,它的实现仍然是公开的。我看不出它对脱钩有什么帮助。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-16 12:49:47

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

您还可以使项目成为一个完整的程序集,这样您的公共成员就可以是内部的,并且只能从程序集中访问。

您还可以让对象使用接口来最小化可访问的内容。

代码语言:javascript
复制
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部分。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44000851

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档