策略模式

 

策略模式:定义了算法族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。

不是所有的鸭子都会飞或者叫,只有部分的鸭子会飞和叫,所以把这些变化的抽离出来写成接口,然后写出接口实现类,鸭子根据不同的行为去调用这些类。

项目中一般  serviceimpl实现了  service,在controller 选择合适的service的实现类 。这里就用到了策略模式

Duck类

public abstract class Duck {
	//这里创建 FlyBehavior 和 QuackBehavior 对象 而不去实现接口 ,是为了 FlyBehavior 和 QuackBehavior 子类的复用
	protected  FlyBehavior flyBehavior;
	protected QuackBehavior quackBehavior;
	
	
	public FlyBehavior getFlyBehavior() {
		return flyBehavior;
	}

	public void setFlyBehavior(FlyBehavior flyBehavior) {
		this.flyBehavior = flyBehavior;
	}

	public QuackBehavior getQuackBehavior() {
		return quackBehavior;
	}

	public void setQuackBehavior(QuackBehavior quackBehavior) {
		this.quackBehavior = quackBehavior;
	}

	public abstract void display() ;
	
	public void fly() {
		flyBehavior.fly();	
	}
	
	public void quackBehavior() {
		quackBehavior.quack();	
	}
	
}

FlyBehavior 

public interface FlyBehavior {
	void fly();
}

QuackBehavior

public interface QuackBehavior {
	
	void quack();
	
	
}

NoFlyBehavior

public class NoFlyBehavior implements FlyBehavior{

	public void fly() {
		System.out.println("不会飞");
		
	}
	
}

FlyBehavior1

public class FlyBehavior1 implements FlyBehavior{

	public void fly() {
		System.out.println("直线飞");
		
	}
	
}

NoQuackBehavior

public class NoQuackBehavior implements QuackBehavior{

	public void quack() {
		System.out.println("不会叫");
		
	}
	
	
	
}

QuackBehavior1

public class QuackBehavior1 implements QuackBehavior{

	public void quack() {
		System.out.println("呱呱叫");
		
	}
	
	
	
}

BlueDuck


public class BlueDuck extends Duck {

	public BlueDuck() {

	}

	public BlueDuck(FlyBehavior flyBehavior, QuackBehavior quackBehavior) {
		this.flyBehavior = flyBehavior;
		this.quackBehavior = quackBehavior;
	}

	@Override
	public void display() {
		System.out.println("我是一只小蓝鸭");

	}

}

YellowDuck

public class YellowDuck extends Duck {

	public YellowDuck() {

	}

	public YellowDuck(FlyBehavior flyBehavior, QuackBehavior quackBehavior) {
		this.flyBehavior = flyBehavior;
		this.quackBehavior = quackBehavior;
	}

	@Override
	public void display() {
		System.out.println("我是一只小黄鸭");

	}

}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值