我一直在考虑一个有趣的想法(不知道我是否会将它包含在任何代码中,但想想它很有趣)
假设我们有一个程序需要大量的类,所有类都是某个子类。这些类都需要是单例的。现在,我们可以为这些类中的每一个编写单例模式,但一遍又一遍地编写相同的代码似乎很浪费,而且我们已经有了一个公共(public)基类。创建一个 A 的 getSingleton 方法真的很好,当从子类调用时,返回 B 类的单例(为简单起见转换为 A 类)
class A{
public A getSingleton(){
//Wizardry
}
}
class B extends A{
}
A blargh = B.getSingleton()
A gish = B.getSingleton()
if(A == B)
System.out.println("It works!")
在我看来,这样做的方法是识别并调用 B 的默认构造函数(假设我们不需要传递任何东西。)我知道一点 Java 中反射的黑魔法,但我我不确定这是否可以完成。
有人对此感兴趣吗?
最佳答案
从技术上讲,我认为没有理由不能完成与此类似的事情。你的确切方案将不起作用,因为你的 getSingleton
是 static
(即使你没有这样声明它)所以它无法告诉它正在调用哪个类。将其更改为 static A getSingleton(Class cls)
,它可能可行。
但是,与在每个派生类中使用单行代码 getSingleton
相比,这真的有那么大的胜利吗?
对于初学者来说,您的 getSingleton
返回 A
,因此如果有人为 B
调用它,他们会返回一个 A
并且必须向下转换才能将其用作 B
。
此外,该方案并不完全透明。
当然,考虑起来很有趣,但在任何生产系统中执行此操作之前,我会寻找更有说服力的理由。
关于java - Java 中的分层单例可能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4546927/