// 1. Το Strategy Interface interface WeaponBehavior { void useWeapon(); } // 2. Concrete Strategies class SwordBehavior implements WeaponBehavior { public void useWeapon() { System.out.println("Attack with sword!"); } } class BowBehavior implements WeaponBehavior { public void useWeapon() { System.out.println("Attack with bow!"); } } // 3. Το Context (Χαρακτήρας) abstract class GameCharacter { protected WeaponBehavior weapon; // Σύνθεση αντί για κληρονομικότητα public void setWeapon(WeaponBehavior w) { this.weapon = w; } public void attack() { weapon.useWeapon(); } } class Knight extends GameCharacter { public Knight(WeaponBehavior) { setWeapeon(WeaponBehavior); // Αρχικό όπλο } } // 4. Η διαφορά στην πράξη public class ActionGame { public static void main(String[] args) { GameCharacter arthurs = new Knight(new SwordBehavior()); arthurs.performAttack(); // Χτύπημα με Σπαθί! // ΑΛΛΑΓΗ ΣΥΜΠΕΡΙΦΟΡΑΣ at RUNTIME (Αδύνατο με κληρονομικότητα) System.out.println("The knight finds a bow!!!"); arthurs.setWeapon(new BowBehavior()); arthurs.performAttack(); // Επίθεση με Τόξο! } }