我想强制子类来实现单例模式.
我原本以为在父类中有一个抽象的静态属性,但是虽然接近但是没有意义(抽象要求和实例).
接下来,我想到了一个带有静态属性的接口,但这也没有意义(接口也需要一个实例).
这是可能的,或者我应该放弃这一思路并实施抽象工厂?
请重新考虑.你不想在这里使用单身人士.您正在为从您的课程派生的用户提供一些功能.没关系.但是你也在规定必须始终使用的一种特定方式,而且绝对没有理由.这是不好的.
在大多数情况下仅对该类的一个对象进行实例化可能是有意义的,但在这种情况下,只需将对象实例化一次即可.这并不是说你很可能在没有注意的情况下意外地实例化了十几个对象.而且,你怎么知道有两个实例永远不会有用?即使是现在我也能想到几个案例.
单元测试:您可能希望每个测试都实例化此对象,然后再将其拆除.由于大多数人都有多个单元测试,因此您需要多次实例化它.
或者您可能在某些时候决定在游戏中具有多个相同/相似的级别,这意味着创建多个实例.
单身人士给你两件事:
保证不会实例化对象的一个实例,并且
对该实例的全局访问
如果你不需要这两件事,那就有更好的选择.您当然不需要全局访问.(全局变量很糟糕,通常是设计不良的症状,特别是在游戏状态等可变数据中)
但是,您不需要保证不会实例化多个实例.如果我实例化对象两次,它是世界末日吗?应用程序会崩溃吗?如果是这样,您需要保证.但在你的情况下,不会发生任何不好的事情.实例化对象的人仅使用比必要更多的内存.但他可能有理由.
简单地在类文档中添加这是一个非常庞大且昂贵的类,并且您不应该经常实例化它.问题解决了.您不会删除以后可能会变得有用的灵活性,您不会无缘无故地授予对数据的全局访问权限.因为您可以控制谁可以看到该对象,所以您不需要将其淹没在将成为多线程应用程序瓶颈的锁中.您没有隐藏在代码中的隐藏依赖项,这使得测试更加困难并且难以重用.