2015-01-05 3 views
-2

Я пытаюсь создать сложные объекты символов. Каждый объект имеет имя, и для каждого объекта с тем же именем они имеют одни и те же исходные данные. Тем не менее, есть также некоторые бит данных, которые предоставляются объекту при его создании. Например, «Слон» всегда начинается с веса 500, но его положение определяется, когда оно создано. Любое из этих значений позже может быть изменено во время выполнения.Создание сложного объекта

Я имею в виду решение этой проблемы, имея кучу кода, как показано ниже:

class CharacterStaticParameters { 
    int weight; 
    int numberOfFeet; 
    int numberOfEyes; 
} 

class CharacterDynamicParameters { 
    float positionX; 
    float positionY; 
    float velocityX; 
    float velocityY; 
} 

class Character { 
    int weight; 
    int numberOfFeet; 
    int numberOfEyes; 
    float positionX; 
    float positionY; 
    float velocityX; 
    float velocityY; 

    public Character(CharacterStaticParameters characterStaticParameters, 
     CharacterDynamicParameters characterDynamicParameters) 
    { 
     this.weight = characterStaticParameters.weight; 
     this.numberOfFeet = characterStaticParameters.numberOfFeet; 
     this.numberOfEyes = characterStaticParameters.numberOfEyes; 
     this.positionX = characterDynamicParameters.positionX; 
     this.positionY = characterDynamicParameters.positionY; 
     this.velocityX = characterDynamicParameters.velocityX; 
     this.velocityY = characterDynamicParameters.velocityY; 
    } 
} 

class StaticParameters { 
    public static final Map<String, CharacterStaticParameters> nameToParameters 
     = new HashMap<String, CharacterStaticParameters>(); 
} 

//function that's somewhere else 
public Character build(String name, 
    CharacterDynamicParameters characterDynamicParameters) 
{ 
    CharacterStaticParameters characterStaticParameters = 
     StaticParameters.nameToParameters.get("Elephant"); 
    return new Character(characterStaticParameters, 
     characterDynamicParameters); 
} 

Есть ли лучший способ решить эту проблему? Кроме того, есть ли что-то, что может смутить насчет того, как я все назвал? Например, следует ли пытаться использовать слова, отличные от «статического» и «динамического», или более приятное слово, чем «параметры»?

+0

Один из распространенных способов состоит в том, чтобы иметь класс «Слон». – immibis

+0

, если у вас ограничено количество символов 'CharacterStaticParameters', вы можете делать заводы – user902383

+4

Это неопровержимо. Вы не дали обоснования или вариантов использования для своего проекта, а рекомендации по названиям типов и переменных по своей сути основаны на мнениях. Вы эффективно просите кодовую проверку кода ... и для этого есть еще один сайт. –

ответ

2
interface Animal{ 

} 

class Elephant implements Animal{ 

} 

Создать структуру класса что-то вроде выше, если животное, имеющее некоторые initial value затем указать, что само значение в классе, если вы хотите, чтобы дать значение для вашего животного, вы используете constructor дать значение во время создания животного.