用泛型实现一个单例模式基类
时间: 2024-10-20 07:13:46 浏览: 36
非常好的C++设计模式项目资源,分享出来.zip
在Java中,我们可以使用泛型和构造函数重载来创建一个支持多种类型的单例模式基类。这个设计允许我们创建一个模板化的单例,每个实例都是其指定类型的一个唯一实例。下面是一个简单的示例:
```java
public abstract class SingletonBase<T> {
private static final T INSTANCE;
// 使用静态初始化块保证线程安全
static {
try {
INSTANCE = createInstance(); // 虽然这里是抽象方法,但在实际子类中需要提供具体实现
} catch (Exception e) {
throw new RuntimeException("Error creating instance", e);
}
}
protected abstract T createInstance() throws Exception; // 抽象方法,子类需实现
public static T getInstance() {
return INSTANCE;
}
// 防止直接实例化该类
private SingletonBase() {}
}
// 子类实例化
class ConcreteSingleton extends SingletonBase<ConcreteType> {
@Override
protected ConcreteType createInstance() throws Exception {
return new ConcreteType();
}
}
```
在这个例子中,`ConcreteSingleton`是`SingletonBase`的具体实现,它创建的是`ConcreteType`的单例。通过这种方式,你可以为不同的业务场景提供不同的单例行为。
阅读全文