策略模式

策略模式

  分别封装行为接口,实现算法族,超类里放行为接口对象,在子类里具体设定行为对象。

设计原则

  分离变化部分,针对接口编程,多用组合,少用继承。

示例:模拟鸭子游戏

提取变化部分(behavior)设计成接口,实现算法族,假如变化部分为fly和quack

flybehavior接口

public interface FlyBehavior {
	void fly();
}

实现算法族

public class	BadFlyBehavior implements FlyBehavior
{
	@Override
	public void fly() {
		// TODO Auto-generated method stub
		System.out.println("--BadFly--");
	}
}
public class	GoodFlyBehavior implements FlyBehavior
{

	@Override
	public void fly() {
		// TODO Auto-generated method stub
		System.out.println("--GoodFly--");
	}
	
}

public class	NoFlyBehavior implements FlyBehavior
{
	@Override
	public void fly() {
		// TODO Auto-generated method stub
		System.out.println("--NoFly--");
	}
}


quackbehavior接口

public	interface QuackBehavior {
	void quack();
};

实现算法族

public	class GaGaQuackBehavior implements QuackBehavior
{

	@Override
	public void quack() {
		// TODO Auto-generated method stub
		System.out.println("__GaGa__");
	}	
}

public	class GeGeQuackBehavior implements QuackBehavior
{

	@Override
	public void quack() {
		// TODO Auto-generated method stub
		System.out.println("__GeGe__");
	}	
}

public	class NoQuackBehavior implements QuackBehavior
{
	@Override
	public void quack() {
		// TODO Auto-generated method stub
		System.out.println("__NoQuack__");
	}
}

duck超类

public abstract class Duck {

	FlyBehavior mFlyBehavior;
	QuackBehavior mQuackBehavior;

	public Duck() {

	}

	public void Fly() {
		mFlyBehavior.fly();
	}

	public void Quack() {
		mQuackBehavior.quack();
	}

	public abstract void display();

	public void SetQuackBehavoir(QuackBehavior qb) {
		mQuackBehavior = qb;
	}

	public void SetFlyBehavoir(FlyBehavior fb) {
		mFlyBehavior = fb;
	}

	public void swim() {
		System.out.println("~~im swim~~");
	}
}

GreenHeadDuck子类

public class GreenHeadDuck extends Duck {

	public GreenHeadDuck() {
		mFlyBehavior = new GoodFlyBehavior();
		mQuackBehavior = new GaGaQuackBehavior();
	}

	@Override
	public void display() {
		// TODO Auto-generated method stub
		System.out.println("**GreenHead**");
	}

}

RedHeadDuck子类

public class RedHeadDuck extends Duck {

	public RedHeadDuck() {
		mFlyBehavior = new BadFlyBehavior();
		mQuackBehavior = new GeGeQuackBehavior();
	}

	@Override
	public void display() {
		// TODO Auto-generated method stub
		System.out.println("**RedHead**");
	}

}

测试Test

public static void main(String[] args) {
		Duck greenDuck=new GreenHeadDuck();
		greenDuck.display();
		greenDuck.Fly();//旧fly
		greenDuck.SetFlyBehavoir(new BadFlyBehavior());
		greenDuck.Fly();//新fly
		greenDuck.Quack();
		greenDuck.SetQuackBehavoir(new NoQuackBehavior());
		greenDuck.Quack();
		greenDuck.swim();
	}
**GreenHead**
--GoodFly--
--BadFly--
__GaGa__
__NoQuack__

~~im swim~~


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值