[ Web Proxy ]
URL:
Viewing: https://raw.githubusercontent.com/riyadomf/Design-Patterns-Java/main/Strategy/Strategy.java [Back]  [Original]

// All kinds of run behaviour are handled by RunBehaviour interface.
//    This interface defines the signature of all run behaviours 
// If we want to add new run behaviour, we just extend the RunBehaivour interface.
//
// Similarly, all kinds of kick behaviours are handled by KickBehaviour interface.

interface RunBehaviour{
    String performRun();
}

interface KickBehaviour{
    String performKick();
}

class RunLikeAmateur implements RunBehaviour{
    public String performRun(){
        return "runs like amateur";
    }
}
class RunLikeMbappe implements RunBehaviour{
    public String performRun(){
        return "sprints like Mbappe";
    }
}

class KickLikeAmateur implements KickBehaviour{
    public String performKick(){
        return "Kicks like amateur";
    }
}
class KickLikeBeckham implements KickBehaviour{
    public String performKick(){
        return "bends like Beckham";
    }
}

class Player{
    private String name;
    private RunBehaviour runBehaviour;
    private KickBehaviour kickBehaviour;

    Player(String name, RunBehaviour runBehaviour, KickBehaviour kickBehaviour){
        this.name = name;
        this.runBehaviour = runBehaviour;
        this.kickBehaviour = kickBehaviour;
    }

    String performRun(){
        return runBehaviour.performRun();
    }
    String performKick(){
        return kickBehaviour.performKick();
    }

    public void setRunBehaviour(RunBehaviour runBehaviour){
        this.runBehaviour = runBehaviour;
    }
    public void setKickBehaviour(KickBehaviour kickBehaviour) {
        this.kickBehaviour = kickBehaviour;
    }

    public String getName(){
        return this.name;
    }

    @Override
    public String toString() {
        return this.getName() + " " +  this.performKick() + " and " 
                + runBehaviour.performRun() + ".";
    }
   
}


public class Strategy{
    public static void main(String[] args){
        Player p1 = new Player("Riyad", new RunLikeAmateur(), new KickLikeAmateur());

        System.out.println(p1);

        p1.setRunBehaviour(new RunLikeMbappe());
        p1.setKickBehaviour(new KickLikeBeckham());
                
        System.out.println(p1);
    }
}


Web Proxy Viewer  |  New URL  |  Original Page