Ciclo variabile nel modello di metodo Template

0

Sto imparando il modello di metodo dei modelli. Mi è venuta una domanda. Come possiamo variare loop usando Template Method Pattern?

Supponiamo di avere il seguente codice:

public class ThreeDimensionalPoint
{
    public static int startCoordinate = 0;
    public static int endCoordinate = 100;

    int x;
    int y;
    int z;

    public ThreeDimensionalPoint(int x, int y, int z) {
        this.x = x;
        this.y = y;
        this.z = z;
    }

    void doSomething()
    {
        // Do something using x, y, z
    }

    public void varyXAndDoSomething()
    {
        for (x = startCoordinate; x <= endCoordinate; x++)
        {
            doSomething();
        }
    }

    public void varyYAndDoSomething()
    {
        for (y = startCoordinate; y <= endCoordinate; y++)
        {
            doSomething();
        }
    }

    // Similar method for varying z
}

Come possiamo implementare un modello di metodo modello come varyACoordinateAndDoSomething ? Ho pensato ad una soluzione. Questo è indicato di seguito:

public abstract class ThreeDimensionalPoint
{
    public static int startCoordinate = 0;
    public static int endCoordinate = 100;

    int x;
    int y;
    int z;

    public ThreeDimensionalPoint(int x, int y, int z) {
        this.x = x;
        this.y = y;
        this.z = z;
    }

    void doSomething()
    {
        // Do something using x, y, z
    }

    public void varyACoordinateAndDoSomething()
    {
        for (int changedCoordinate = startCoordinate; changedCoordinate <= endCoordinate; changedCoordinate++)
        {
            changeThatCoordinate(changedCoordinate);  // Abstract method.
            doSomething();
        }
    }

    public abstract void changeThatCoordinate(int varyingParameter);

}





public class ThreeDimensionalPointVaryingX extends ThreeDimensionalPoint {


    public ThreeDimensionalPointVaryingX(int x, int y, int z) {
        super(x, y, z);
    }

    @Override
    public void changeThatCoordinate(int varyingParameter) {
        x = varyingParameter;
    }
}


// I will implement similar classes for varying Y and Z

C'è una soluzione migliore?

    
posta Md. Abu Nafee Ibna Zahid 05.01.2018 - 08:19
fonte

0 risposte

Leggi altre domande sui tag