La respuesta de Gregory Weir es mi favorita sobre cómo estructurar las instancias de elementos para realizar múltiples roles.
Para cargar desde un archivo:
Primero, usa YAML. YAML es un lenguaje de descripción de datos con características; puede ser analizado relativamente rápido, leído y editado por humanos, admite datos binarios y existen bibliotecas para la mayoría de los lenguajes de programación, incluido Java. Esto resuelve el "¿cómo obtengo datos de archivos en objetos?"
En segundo lugar, use el patrón de peso mosca . La mayoría de los datos que lees de esos archivos son estáticos. No va a cambiar por instancia ("el hacha hace 1d10 de daño base y rompe madera pero no piedra", eso es cierto para las cinco hachas que tiene un jugador). Lo que realmente lee de los archivos YAML son estas definiciones platónicas, y sus instancias de elementos individuales tienen referencias sin propiedad (y constantes) a estas, junto con datos por instancia como "¿Cuántos cambios antes de romper?", "¿Dio el jugador me un nombre personalizado? ", y así sucesivamente.
Al compartir los datos de instancias cruzadas en un solo objeto, conserva mucha memoria y facilita la actualización de elementos sin un estado de juego persistente (guardar juegos o la base de datos de jugadores).
Entonces la estructura de tu clase se parece a:
- Elemento de clase: una instancia por elemento
- Posee una instancia de arma
- Posee una instancia de herramienta
- Tiene un nombre personalizado, etc.
- arma de clase: (hasta) una instancia por elemento
- Es un elemento de componente
- Se refiere al arma Def
- Tiene un nivel de encantamiento adicional, etc.
- Herramienta de clase: (hasta) una instancia por elemento
- Es un elemento de componente
- Se refiere a ToolDef
- Tiene una durabilidad, etc.
- clase WeaponDef: una instancia por tipo de arma
- Leer de un archivo, los campos deben ser constantes.
- Tiene una cantidad de daño base, 1 o 2 manos, etc.
- clase ToolDef: una instancia por tipo de herramienta
- Leer de un archivo, los campos deben ser constantes.
- Tiene una durabilidad base, materiales que puede romper, etc.