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?