为了仅允许工厂方法实例化对象,防止实例化基类和未初始化的对象,可以采用以下方法:
例如,假设有一个基类Animal
和一个子类Dog
,可以这样实现:
public class Animal {
private Animal() {}
public static Animal createInstance(String type) {
if (type.equals("dog")) {
return new Dog();
}
return null;
}
}
public class Dog extends Animal {
private Dog() {}
}
这样,可以通过调用Animal.createInstance("dog")
来创建Dog
对象,而不能直接实例化Animal
或Dog
类。
public abstract class Animal {
public static Animal createInstance(String type) {
if (type.equals("dog")) {
return new Dog();
}
return null;
}
}
public class Dog extends Animal {
private Dog() {}
}
这样,可以通过调用Animal.createInstance("dog")
来创建Dog
对象,而不能直接实例化Animal
或Dog
类。
总之,通过使用私有构造函数、工厂方法和抽象类,可以有效地仅允许工厂方法实例化对象,防止实例化基类和未初始化的对象。
领取专属 10元无门槛券
手把手带您无忧上云