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_1_7_ 2011-10-17 17:26
    关注

    反射也能调用private的构造函数

    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥100 用python模拟生态环境
  • ¥30 哈夫曼编码译码器打印树形项目
  • ¥20 求完整顺利登陆QQ邮箱的python代码
  • ¥15 怎么下载MySQL,怎么卸干净原来的MySQL
  • ¥15 网络打印机Ip地址自动获取出现问题
  • ¥15 求局部放电案例库,用于预测局部放电类型
  • ¥100 QT Open62541
  • ¥15 stata合并季度数据和日度数据
  • ¥15 谁能提供rabbitmq,erlang,socat压缩包,记住版本要对应
  • ¥15 Vue3 中使用 `vue-router` 只能跳转到主页面?