Цитата:
Единственное, что пока приходит в голову, это сделать отдельный класс CharacterData для неизменных "справочных" значений и передавать в конструктор каждого экземпляра Character. Но всё равно будет геморрой с созданием наследников CharacterData, плюс в самом Character не обойтись без записей записей типа:
Код AS3:
public function get intelligence() : Number {return _data.intelligence}
Поэтому эффективность такого решения остаётся под вопросом.
|
А для чего дублировать все поля в Character, если можно дать ему всего один метод чтения
Код AS3:
private var _data:CharacterData;
public function get data():CharacterData {
return _data;
}
Не зацикливайся на наследовании. Очень часто композиция может быть более эффективной. Особенно в играх. Ты уже выделил компонент CharacterData. Попробуй весь класс Character разбить на такие маленькие узкоспециализированные компоненты, а самому Character давать только ссылки на эти компоненты, без каких-либо знаний о них.
Почитай какие-нибудь статьи на тему плюсов и минусов композиции/наследования. Посмотри на
Ash. Это довольно простой фреймворк, реализующий шаблон проектирования Entity-Component-System. Он основывается на использовании композиции вместо наследования. Чаще всего применяется именно для создания игр. Изучи принцип, по которому работает данный фреймворк и наверняка ты пересмотришь свои взгляды на многие вещи, касающиеся организации своего кода.