我正在开发一个图书馆,并试图使一切井井有条。因此,我具有嵌套的包结构和单个类,该类应该可以访问所有其他类的构造函数:
这是我的项目结构:
src
main
java
main
Main.java
zoo
Zoo.java
animals
Animal.java
mammals
Dog.java
fish
Salmon.java
birds
Falcon.java
这是我在主要方法中拥有的代码:
Main.java :
Zoo zoo = new Zoo(password);
Animal dog = zoo.getDog(name);
Animal salmon = zoo.getSalmon(name);
Animal falcon = zoo.getFalcon(name);
我想阻止用户直接(从zoo
包外部)创建动物:
Animal dog = new Dog("Charlie"); //error - constructor isn't public
但是我不确定如何实现它。我可以将所有类放在zoo
包中,并使动物构造函数只能在包级别访问。 但是,我将不得不牺牲软件包的结构 e,而我宁愿不这样做。
Zoo.java :
public class Zoo {
private String password;
public Zoo(String password) {this.password = password;}
public Dog getDog(String name) {return new Dog(name);}
public Salmon getSalmon(String name) {return new Salmon(name);}
public Falcon getFalcon(String name) {return new Falcon(name);}
}
Animal.java :
public abstract class Animal {
protected String name;
public Animal(String name) {this.name = name;}
}
动物:
public class Dog extends Animal {
public Dog(String name) {super(name);}
}
public class Salmon extends Animal {
public Salmon(String name) {super(name);}
}
public class Falcon extends Animal {
public Falcon(String name) {super(name);}
}
那么可以做些什么来完成以上工作?也许有某种模式吗?