[デザインパターン]戦略

[デザインパターン]戦略


例としては、参照ヘッドファーストデザインパターン

IFlyBehavior


public interface IFlyBehavior {
	public void fly();
}

FlyNoWay


public class FlyNoWay implements IFlyBehavior
{
	public void fly()
	{
		System.out.println("I can't fly!!");
	}
}

FlyWithWings


public class FlyWithWings implements IFlyBehavior{
	public void fly()
	{
		System.out.println("I'm flying!!");
	}
}

IQuackBehavior


public interface IQuackBehavior {
	public void quack();
}

医者


public class Quack implements IQuackBehavior{
	public void quack()
	{
		System.out.println("Quack");
	}
}

MuteQuack


public class MuteQuack implements IQuackBehavior{
	public void quack()
	{
		System.out.println("<< Silence >>");
	}
}

スクイーク


public class Squeak implements IQuackBehavior{
	public void quack()
	{
		System.out.println("Squeak");
	}
}

アヒル


public abstract class Duck {
	IFlyBehavior iFlyBehavior;
	IQuackBehavior iQuackBehavior;
	public Duck(){}
	public abstract void display();
	public void performFly()
	{
		iFlyBehavior.fly();
	}
	public void perFormQuack()
	{
		iQuackBehavior.quack();
	}
	public void SetFlyBehavior(FlyBehavior fb)
	{
		iFlyBehavior = fb;
	}
	public void SetQuackBehavior(QuackBehavior qb)
	{
		iQuackBehavior = qb;
	}
	public void swim()
	{
		System.out.println("All ducks float, even decoys!");
	}
}

RobotDuck


public class RobotDuck extends Duck{
	public RobotDuck()
	{
		iQuackBehavior = new MuteQuack();
		iFlyBehavior = new FlyNoWay();
	}
	public void display()
	{
		System.out.println("I'm a real Mallard duck");
	}
}

mallardduck


public class MallardDuck extends Duck{
	public MallardDuck()
	{
		iQuackBehavior = new Quack();
		iFlyBehavior = new FlyWithWings();
	}
	public void display()
	{
		System.out.println("I'm a real Mallard duck");
	}
}

MiniDuckSimulator


public class MiniDuckSimulator {
	public static void main(String[] args)
	{
		Duck mallard = new MallardDuck();
		mallard.perFormQuack();//perFormQuack() from Duck class
		mallard.performFly();
		
		System.out.println("-----------------------------------");
		System.out.println("change before...");
		mallard = new RobotDuck();
		mallard.perFormQuack();//change before the behavior 
		mallard.performFly();
		
		System.out.println("change after...");
		mallard.SetFlyBehavior(new FlyWithWings());
		mallard.SetQuackBehavior(new Quack());
		mallard.perFormQuack();//before change the behavior 
		mallard.performFly();
	}
}

出力:

クワック
私が飛びました!
-----------------------------------
変更前の...
<<沈黙>>
私は飛ぶことができません!!
...後に変更
クワック
私が飛びました!

オリジナル:大列  [デザインパターン]戦略


おすすめ

転載: www.cnblogs.com/chinatrump/p/11458336.html