mercredi 8 novembre 2017

Creating child objects on basis created parent object in java

I'm learning java design patterns and I wonder if I can apply some with following problem. I have class Solider and some child classes, for example: General and Sergeant. I'm creating Solider object and in runtime I want to change this object to General or Sergeant object, or create new Sergeant or General object using created earlier Solider object:

 Solider s = new Solider(...);
 .....
 if (generalCondition) {
     General g = createGeneralFromSolider(s);
     //or better:
     //General g = promoteSoliderToGeneral(s);
 } else if (sergeantCondition) {
      Sergeant sr = createSergeantFromSolider(s);
      //or better:
      //Sergeant sr = promoteSoliderToSergeant(s);
 }

Firstly I decided to create additional constructor in General/Sergeant Class:

Class General extends Solider {
    General(Solider s, Map<String, String> generalSpecificParams) {
        //first we are going to copy all solider params to general params (bad idea if we have a lot of params)
        this.setParamX(s.getParamX());
        ....
        //then we can assign the rest of general-specific params
        this.setGeneralSpecificParams(generalSpecificParams);
    }
}

and use it in methods createGeneralFromSolider but I'm not sure if it is elegant way. Main disadvantage is that I create new object, so after calling createGeneralFromSolider I have 2 object in memory. I would rather have one object in memory: General/Sergeant promoted from Solider (object General/Sergeant which earlier was the Solider object). I wonder if I can use some design patter to resolve it. I remember that in C++ there has been something like copying constructors which copying all params from one object to another by assigning all params, one after another. In Java I didn't hear about anything similar.

Aucun commentaire:

Enregistrer un commentaire