2017-01-19 3 views
2

Я реализую базу данных для проекта структур данных, и мне очень тяжело обволакивать логику того, что мне нужно делать.Использование конструктора классов для создания массивов объектов из двух разных типов

У меня есть абстрактный суперкласс, называемый Person, который имеет два дочерних класса с именем Student и Instructor.

Наконец, у меня есть другой класс под названием UniversityPeople, который создает ссылку на массив объектов Student и Instructor при использовании приложением. Когда вызывается конструктор для UniversityPeople, он создает массив указанного объекта, используя размер в качестве параметра. Я не могу представить, как отличить два объекта в конструкторе при создании. Моя первая мысль была 2 Конструкторы:

Instructor[] instArray; 
Student[] stuArray; 

public UniversityPeople(int size) 
{ 
    Student[] stuArray = new Student[size]; 
} 
public UniversityPeople(int size) 
{ 
    Instructor[] instArray = new Instructor[size]; 
} 

Но после того, как думать об этом (и делать некоторое чтение) Я знаю, что я не могу это сделать. Моя следующая мысль заключалась в том, чтобы использовать тип метода проверки объекта в конструкторе UniversityPeople, но мне трудно его реализовать.

В основном, класс должен знать, когда нужно создать массив объектов Student и когда нужно создать массив объектов Instructor с целым размером в качестве аргумента.

Если кто-нибудь может указать мне в правильном направлении, я бы очень признателен. В последнее время я в основном кодировал C, поэтому возвращение в ООП стало немного странным после стольких времен. Благодаря!

+0

Почему бы не создать массив Person? –

+0

Вы можете создавать статические заводские методы на «UniversityPeople», которые, в отличие от конструкторов, можно отличить друг от друга по имени. Но я не очень хорошо понимаю ваши требования. Почему ваш класс должен иметь два массива в качестве членов, но только инициализировать их? –

+0

, потому что его абстрактно, и если я правильно помню, подклассы не имели бы доступа к их методам, а только к абстрактным суперклассам. Возможно, я ошибаюсь? – FuegoJohnson

ответ

5

Во-первых, я бы поставил под вопрос подход - похоже, что этот единственный класс пытается сделать слишком много вещей. Но если вы действительно, действительно хотите сделать это, я бы рекомендовал статические фабричные методы, требующие приватный конструктор:

public class UniversityPeople { 
    private final Student[] students; 
    private final Instructor[] instructors; 

    private UniversityPeople(int studentCount, int instructorCount) { 
     students = new Student[studentCount]; 
     instructors = new Instructor[instructorCount]; 
    } 

    public static UniversityPeople forStudents(int size) { 
     return new UniversityPeople(size, 0); 
    } 

    public static UniversityPeople forInstructors(int size) { 
     return new UniversityPeople(0, size); 
    } 
} 

Вы можете выполнить проверку по каждому размеру и только выделить, если это больше, чем 0, если вы действительно хотите к. Но, как я уже сказал, я бы пересмотрел дизайн, если это возможно.

+0

Да, я думал, что реализация была странной, но это то, о чем явным образом попросил инструктор, поэтому я должен повиноваться. Для меня 2 разных класса имели бы смысл, но я отвлекаюсь. В любом случае, это определенно похоже, что это сработает. – FuegoJohnson

+0

@FuegoJohnson: Возможно, вы захотите включить эту информацию в вопрос. Каждый раз, когда вы спрашиваете то, что знаете, звучит немного странно, признайте его в вопросе (и укажите обоснование), чтобы избежать обсуждения вокруг этой стороны вещей. Если это то, о чем вас просили, это прекрасно :) –

+0

очень правдивый, я, наверное, должен был что-то сказать, но я так устал и разочаровался в общей реализации класса LOL.В любом случае, спасибо за быстрый ответ, я выбрал ваш ответ. :) – FuegoJohnson

1

Если вам нужно только направление: найдите шаблон дизайна «завод». Это должно помочь вам.

+0

Спасибо, я не знал об этой реализации, но, похоже, это очень полезно, спасибо за то, что я указал в правильном направлении. – FuegoJohnson

Смежные вопросы