策略模式 定义算法族,分别封装起来,让他们之间可以相互替换,此模式让算法的变化独立于使用算法的客户
原则:1、找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一 起,封装变化 ,多用组合少用继承(系统中的某些部分改变不会影响到其他部分,将需要变化的代码“远离”不需要改变的代码)
2、针对接口编程(针对超类型编程 ~~变量声明应该为一个超类),而不是针对实现编程(继承而来并且实现父类方法却被固定的实现方法绑定的死死的)
良好的设计必须兼有 可复用 可扩充 可维护三个特性
鸭子的超类
abstract class Duck {
protected Fly fly;
/**
* 叫
*/
abstract void quack();
/**
* 游
*/
abstract void swim();
}
飞行动作抽离出来远离鸭子本身,高聚合低耦合
interface Fly {
/**
* 飞行动作
*/
void flyOperate();
}
//算法族
public class FastFly implements Fly{
@Override
public void flyOperate() {
System.out.println("快速飞");
}
}
public class SlowFly implements Fly{
@Override
public void flyOperate() {
System.out.println("慢速飞");
}
}
定位鸭子
public class BigDuck extends Duck {
public BigDuck() {
//注入对象
fly = new FastFly();
}
@Override
void quack() {
System.out.println("大鸭子 大声叫");
}
@Override
void swim() {
System.out.println("大鸭子 快速游");
}
}
public class SmallDuck extends Duck {
public SmallDuck() {
//注入对象
fly = new SlowFly();
}
@Override
void quack() {
System.out.println("小鸭子 小声叫");
}
@Override
void swim() {
System.out.println("小鸭子 慢速游");
}
}
类图: