Strategy パターン

Strategy パターン

Step 2 オーバーライド

MiniDuckSimulator
Step 1

public class MiniDuckSimulator {
    public static void main(String[] args) {
        MallardDuck mallard = new MallardDuck();
        RedHeadDuck redhead = new RedHeadDuck();

        mallard.display();
        mallard.performQuack();
        mallard.performFly(); 

        System.out.println();

        redhead.display();
        redhead.performQuack();
        redhead.performFly(); 
    }
}

Step 2

public class MiniDuckSimulator {
    public static void main(String[] args) {
        MallardDuck mallard = new MallardDuck();
        RedHeadDuck redhead = new RedHeadDuck();
        RubberDuck  rubber  = new RubberDuck(); // 追加
        DecoyDuck   decoy   = new DecoyDuck();  // 追加

        mallard.display();
        mallard.performQuack();
        mallard.performFly(); 

        System.out.println();

        redhead.display();
        redhead.performQuack();
        redhead.performFly(); 

        System.out.println();

        // 追加
        rubber.display();
        rubber.performQuack();
        rubber.performFly(); 

        System.out.println();

        // 追加
        decoy.display();
        decoy.performQuack();
        decoy.performFly(); 
    }
}

Duck

public abstract class Duck {
    public Duck() {
    }

    abstract void display();

    public void performFly() {
        System.out.println("I'm flying!!");
    }

    public void performQuack() {
        System.out.println("Quack");
    }
}

MallardDuck

public class MallardDuck extends Duck {

    public MallardDuck() {
    }

    public void display() {
        System.out.println("I'm a real Mallard duck");
    }
}

RedHeadDuck

public class RedHeadDuck extends Duck {

    public RedHeadDuck() {
    }

    public void display() {
        System.out.println("I'm a real Red Headed duck");
    }
}

RubberDuck
追加

public class RubberDuck extends Duck {

    public RubberDuck() {
    }

    public void display() {
        System.out.println("I'm a rubber duckie");
    }

    // オーバーライド
    public void performFly() {
        System.out.println("I can't fly");
    }

    // オーバーライド
    public void performQuack() {
        System.out.println("Squeak");
    }
}

DecoyDuck
追加

public class DecoyDuck extends Duck {

    public DecoyDuck() {
    }

    public void display() {
        System.out.println("I'm a duck Decoy");
    }

    // オーバーライド
    public void performFly() {
        System.out.println("I can't fly");
    }

    // オーバーライド
    public void performQuack() {
        System.out.println("<< Silence >>");
    }
}

実行結果

I'm a real Mallard duck
Quack
I'm flying!!

I'm a real Red Headed duck
Quack
I'm flying!!

I'm a rubber duckie
Squeak
I can't fly

I'm a duck Decoy
<< Silence >>
I can't fly