java_2008_4_4 2011-10-17 17:22
浏览 212
已采纳

如何动态的创建 Singleton 实例

如果一个类 ClassA 日后要有不同的实现,那么我可以将 ClassA 中的接口提取出来之后放入一个 InterfaceA 中,然后通过“工厂模式”在工厂中通过读取配置文件(获取对 InterfaceA 的实现类),和反射生成 InterfaceA 的实例(应用中同时只能存在 InterfaceA 的一“种”实现)。
但是现在又要求 InterfaceA 的所有实现必须是 Singleton 。这样便产生了不和谐的地方:Singleton 的 getInstance 方法是 static 的,并且无法从 InterfaceA 中指定。也就是说我只能在工厂中通过调用 Singleton 的构造函数去生成其实例,这样一来,我只能将Singleton 的 Constructor 声明为 public 的。这样就产生了“不是单例”的可能。
如何解决这问题?

  • 写回答

2条回答 默认 最新

  • DreamZhong 2011-10-17 22:04
    关注

    [quote]这个的确可以解燃眉之急。并且通常可以达到预期。但是我觉得这个并不是好的解决方案。因为通过反射所获得的 private 成员,并不应该被调用。也就是说,这些东西是只能看不能依赖使用的。 [/quote]

    那为什么还要提供呢,就是在必要时使用三,只要你能控制,不要到处滥用,那就没有什么问题。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 镍氢电池充电器设计实物使用原理
  • ¥15 逻辑谓词和消解原理的运用
  • ¥15 三菱伺服电机按启动按钮有使能但不动作
  • ¥15 js,页面2返回页面1时定位进入的设备
  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号