在Java中将子类的创建限制为其父(或其他)类
我有一个超类游戏对象,它是游戏中所有对象的超类型。 我想将所有创建和管理代码作为静态方法包含在其中;它应该是唯一一个能够生成扩展GameObject的其他对象的类。 有时,我需要创建一个新对象,有时,出于性能原因,我会从中选择一个对象列表 有没有一种方法可以限制子构造函数对其基类的访问,或者有一种设计模式来实现我想要的功能?1)将超类抽象化 2) 编写一个工厂方法从超类类型创建子类 因为基类(超类)是抽象的,所以子类总是基类类型 您可以在FactoryMethod中避免if条件。请参阅我的帖子@ e、 g在Java中将子类的创建限制为其父(或其他)类,java,Java,我有一个超类游戏对象,它是游戏中所有对象的超类型。 我想将所有创建和管理代码作为静态方法包含在其中;它应该是唯一一个能够生成扩展GameObject的其他对象的类。 有时,我需要创建一个新对象,有时,出于性能原因,我会从中选择一个对象列表 有没有一种方法可以限制子构造函数对其基类的访问,或者有一种设计模式来实现我想要的功能?1)将超类抽象化 2) 编写一个工厂方法从超类类型创建子类 因为基类(超类)是抽象的,所以子类总是基类类型 您可以在FactoryMethod中避免if条件。请参阅我的帖子@
使用Java的访问修饰符,您有两种方法:
private static
嵌套类:
public abstract class GameObject {
private GameObject() {
}
private static class GameObjectImpl1 extends GameObject {
}
}
GameObject
这种方法唯一的缺点是,您需要将所有子类都放在父类中,即文件会很大
GameObject
)成为此包中唯一的公共类。使它的构造函数包私有(同一个包中的子类仍然可以访问它)
这种方法的一个小缺点是,可以通过在其他源根目录中创建具有相同名称的包来对其进行“黑客攻击”。那里的类可以访问
游戏
包中的包私有类。然而,否则这是最干净的方法,我建议您采用。我知道有两种方法可能不止这些
让它成为抽象类。
public abstract class GameObject {
private GameObject() {
}
private static class GameObjectImpl1 extends GameObject {
}
}
package game;
public abstract class GameObject {
GameObject() { //package-private
}
public static GameObject create() {
return new GameObjectImpl1();
}
}
//---------------
package game;
class GameObjectImpl1 extends GameObject { //package-private
}