Я занимаюсь разработкой библиотеки и стараюсь все организовать. Таким образом, у меня есть вложенная структура пакета и один класс, который должен иметь доступ к конструкторам для всех других классов:
Это моя структура проекта:
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);}
}
Итак, что можно сделать для достижения вышеизложенного? Может быть, есть какой-то шаблон для этого?