2016-02-11 5 views
0

В настоящее время я работаю над разработкой некоторой системы, в которой я запутался, если будет правильно контролировать атрибуты базового класса с производным классом.Должен ли атрибут базового класса управляться классом Derived

Например:

Class Building { 
    String name; 
    String[] facilities; 
} 

Class OfficeBuilding extends Building{ 

} 

Class ResidentialBuilding extends Building { 
} 

// Тип Строительного контроля атрибут как объекты здесь, который является пустым по умолчанию. Должен ли он быть частью классов Derived или он должен оставаться частью базового класса, а производные классы должны просто переопределять его значения?

Следует иметь в виду: 1). Все классы - это классы данных. 2). Атрибут базового класса всегда пуст и управляется дочерним классом.

Спасибо.

ответ

0

Существует более одного решения. Не зная вашего прецедента, я бы сказал, что имя и объекты могут полностью управляться родительским классом, даже не доступным напрямую из дочерних классов (только через конструктор/некоторые методы). Я также хотел бы сохранить объекты в виде списка:

Class Building { 
    private String name; 
    private List<String> facilities; 

    public Building(String name, String... facilities) { // facilities won't be null this way 
     this.name = name; 
     this.facilities = new ArrayList<String>(Arrays.asList(facilities)); 
    } 

    public Building(String name) { 
     this(name, new String[0]); 
    } 

    // Only if this makes sense 
    public Building() { 
     this(""); 
    } 

    public String[] getFacilities() { 
     return facilities.toArray(new String[facilities.size()]); 
    } 

    // if needed you can... 
    public void addFacility(String facility) { ... } 
    public void removeFacility(String facility) { ... } 
} 

Class OfficeBuilding extends Building { 
    public OfficeBuilding() { 
     super("Office", "facility1", "facility2"); 
     //... 
    } 
} 
+0

Спасибо Кирилл. Могу я не очень хорошо объяснить свою проблему. подумайте, что вы являетесь клиентом этих классов, и есть ограничения, установленные сервером на основе значений объектов. Теперь, будучи клиентом, вы не сможете узнать, помещаете ли вы что-то неправильно в этих классах без вызова сервера. Я думал, правильно ли это делать с точки зрения сервера, или есть лучший способ справиться с этим. – user3089214

+0

@ user3089214: Если объекты настроены на предопределенные значения, то они не должны быть строкой, а скорее определяют «Enum Facilities» 'со всеми значениями, которые могут вам понадобиться, и изменить реализацию, чтобы использовать перечисление вместо строки. Если вы имеете в виду, что некоторым зданиям разрешено иметь определенные объекты, вам нужно что-то, чтобы регулировать эти правила. В зависимости от того, что они (я до сих пор неясно), это может быть базовый класс или какой-то другой (независимый) класс, который его регулирует. –

+0

Вы абсолютно правы в использовании ENUM, но я не хочу делать изменения кода (добавляя перечисления) каждый раз, когда новые объекты добавляются в категорию, поэтому я не делаю это ENUM и просто строки. – user3089214

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