首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >好的OO设计--单例设计模式

好的OO设计--单例设计模式
EN

Stack Overflow用户
提问于 2018-03-21 06:08:36
回答 2查看 0关注 0票数 0

在设计MVC Java应用程序时,创建一个Singleton‘SystemRegistry’类来存储模型和视图类.

当我创建模型并查看对象,会执行如下操作:

代码语言:txt
复制
SystemRegistry.getInstance().setModel(model);

在我的控制器类中(它们几乎是针对不同GUI项的事件处理程序),我可以访问视图或模型,如下所示:

代码语言:txt
复制
SystemRegistry.getInstance().getView();

我永远不会在我的应用程序的模型部分使用SystemRegistry类,但有时我会使用它来访问(但很少,如果有的话,修改)来自模型的信息。

我如何设计类的另一个方面,可能是,也可能与单例无关,是使用“Manager类型”类。一个例子是我用C++创建的基于OpenGL的游戏引擎。类中存储的一些管理器是这样的:ObjectManager、RenderingManager、LightingManager、EventManager(包括输入)、HUDManager、FrameRateManager、WindowManager等等。可能还有更多的。

在每个新游戏中,我都会创建GameEngine的一个实例,作为一个类范围的变量(大部分游戏逻辑存储在一个类中),并设置不同的管理器(例如,从文件加载窗口协调或照明详细信息,设置FPS等)。要在ObjectManager中注册对象,我需要执行如下操作:

代码语言:txt
复制
Player player = new Player();
gameEngine.getObjectManager().addObject(player);

这个对象现在将存储在ObjectManager类中的一个向量中,并在GameEngine在每个框架中调用ObjectManagerDrawObjects()方法时绘制。

EN

Stack Overflow用户

发布于 2018-03-21 15:47:57

不要将只有一个类的实例与单例模式混为一谈。在例子中,有一个管理各种事情的经理类是可以的。对于整个应用程序来说,只有一个实例也是非常酷的。但是课程使用管理器不应该依赖于一个全局对象的存在(不管它是通过类的静态变量还是被所有人访问的全局变量)。为了减轻这一点,在构造它们时,使它们需要对管理器对象的引用。他们都可以接收到同一个对象的引用,他们不会在意的。这有两个很好的副作用。首先,可以更好地测试您的类,因为您可以很容易地注入一个模拟管理器对象。第二个好处是,仍然可以使用多个管理器对象(例如,在多线程场景中),而不必更改客户端。

票数 0
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100003210

复制
相关文章

相似问题

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