《Head First 设计模式》笔记之策略模式
简述
概念:定义一系列算法,分布封装起来,并使他们可以相互替换。(有点多态的味道)
代码
FlyStrategy
/**
* 飞行策略
* @author ydfind
* @date 2019.10.25
*/
public interface FlyStrategy {
void fly();
}
FlyNoWay
/**
* 无法飞行
* @author ydfind
* @date 2019.10.25
*/
public class FlyNoWay implements FlyStrategy{
@Override
public void fly() {
System.out.println("无法飞行");
}
}
FlyWithWings
/**
* 翅膀飞翔
* @author ydfind
* @date 2019.10.25
*/
public class FlyWithWings implements FlyStrategy{
@Override
public void fly() {
System.out.println("翅膀飞翔");
}
}
使用示例
Duck
package com.ydfind.gof.strategy;
import lombok.Data;
/**
* 鸭子基类
* @author ydfind
* @date 2019.10.25
*/
@Data
public abstract class Duck {
private FlyStrategy flyStrategy;
public void performFly(){
flyStrategy.fly();
}
}
SimpleDuck
/**
* 普通鸭子:无法飞行
* @author ydfind
* @date 2019.10.25
*/
public class SimpleDuck extends Duck {
public SimpleDuck(){
this.setFlyStrategy(new FlyNoWay());
}
}
SwanDuck
/**
* 天鹅:能飞
* @author ydfind
* @date 2019.10.25
*/
public class SwanDuck extends Duck{
public SwanDuck(){
this.setFlyStrategy(new FlyWithWings());
}
}
测试
@Test
public void testStrategy(){
System.out.println("*********************策略 测试********************************");
Duck swanDuck = new SwanDuck();
Duck simpleDuck = new SimpleDuck();
swanDuck.performFly();
simpleDuck.performFly();
}