Implemented Factory for Command objects and fixed Command Pattern implementation.

- Commands now have standard 0-parameter execute method
- Commands are created by CommandFactory

#story[1094]
main
Connor Taylor-Brown 8 years ago
parent 40a3ed1bb0
commit c83442761c

@ -0,0 +1,14 @@
package mock.model.commandFactory;
import mock.model.MockBoat;
import mock.model.MockRace;
/**
* Allows RaceLogic to control MockRace state according to the Command pattern
*/
public interface Command {
/**
* Execute command - standard method name in pattern
*/
void execute();
}

@ -3,7 +3,22 @@ package mock.model.commandFactory;
import mock.model.MockBoat; import mock.model.MockBoat;
import mock.model.MockRace; import mock.model.MockRace;
public interface CommandFactory { /**
* Factory class for Command objects
void runCommand(MockBoat boat, MockRace race); */
public class CommandFactory {
/**
* Generates a command on a race and boat corresponding to the protocol action number.
* @param race to receive command
* @param boat to receive command in race
* @param action number to select command
* @return
*/
public static Command createCommand(MockRace race, MockBoat boat, int action) {
switch(action) {
case 1: return new VMGCommand(race, boat);
case 4: return new TackGybeCommand(race, boat);
default: return null; // TODO - please please have discussion over what to default to
}
}
} }

@ -2,17 +2,22 @@ package mock.model.commandFactory;
import mock.model.MockBoat; import mock.model.MockBoat;
import mock.model.MockRace; import mock.model.MockRace;
import mock.model.VMG;
import shared.model.Bearing;
/** /**
* Created by David on 2/08/2017. * Created by David on 2/08/2017.
*/ */
public class TackGybeCommand implements CommandFactory { public class TackGybeCommand implements Command {
private MockRace race;
private MockBoat boat;
public TackGybeCommand(MockRace race, MockBoat boat) {
this.race = race;
this.boat = boat;
}
//The refactoring of MockRace will require changes to be made //The refactoring of MockRace will require changes to be made
@Override @Override
public void runCommand(MockBoat boat, MockRace race) { public void execute() {
/*VMG newVMG = boat.getPolars().calculateVMG( /*VMG newVMG = boat.getPolars().calculateVMG(
race.getWindDirection(), race.getWindDirection(),
race.getWindSpeed(), race.getWindSpeed(),

@ -2,17 +2,22 @@ package mock.model.commandFactory;
import mock.model.MockBoat; import mock.model.MockBoat;
import mock.model.MockRace; import mock.model.MockRace;
import mock.model.VMG;
import shared.model.Bearing;
/** /**
* Created by David on 2/08/2017. * Created by David on 2/08/2017.
*/ */
public class VMGCommand implements CommandFactory { public class VMGCommand implements Command {
private MockRace race;
private MockBoat boat;
public VMGCommand(MockRace race, MockBoat boat) {
this.race = race;
this.boat = boat;
}
//The refactoring of MockRace will require changes to be made //The refactoring of MockRace will require changes to be made
@Override @Override
public void runCommand(MockBoat boat, MockRace race) { public void execute() {
/*VMG newVMG = boat.getPolars().calculateVMG( /*VMG newVMG = boat.getPolars().calculateVMG(
race.getWindDirection(), race.getWindDirection(),
race.getWindSpeed(), race.getWindSpeed(),

Loading…
Cancel
Save