设计模式 ----------------策略模式
前言
《headfrist设计模式》学习记录,
策略模式(Strategy)
定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的人。
人话:比如我们去逛商场,商场现在正在搞活动,有打折的、有满减的、有返利的等等,其实不管商场如何进行促销,说到底都是一些算法,这些算法本身只是一种策略,并且这些算法是随时都可能互相替换的,比如针对同一件商品,今天打八折、明天满100减30,这些策略间是可以互换的。
笔记
1.找出应用中可能需要变化的地方,把它们独立出来,不要和那些不需要变化的代码混在一起
2.针对借口编程,不是针对实现编程
3.多用组合,少用继承
代码
使用策略模式来实现各种各样鸭子
鸭子超类
public abstract class Duck{
//飞行的行为(并不是所有的鸭子都会, 比如玩具鸭子)
public DuckFlyBehavior duckFlyBehavior;
public void setDuckFlyBehavior(DuckFlyBehavior duckFlyBehavior){
this.duckFlyBehavior=duckFlyBehavior;
}
public void duckFly(){
duckFlyBehavior.fly();
}
//每只鸭子都会游泳
public void swim(){
System.out.print("在游泳的鸭子");
}
//每只鸭子颜色会不同需要重新实现这个方法
pubilc abstract void color();
}
鸭子的飞行行为
//鸭子的飞行行为必须实现 这个接口
public interface DuckFlyBehavior{
void fly();
}
public class FlyDuck implements DuckFlyBehavior{
public void fly(){
System.out.print("会飞的鸭子呀");
}
}
public class NoFlyDuck implements DuckFlyBehavior{
public void fly(){
System.out.print("不会飞的鸭子");
}
}
创建鸭子
// 红色会飞的鸭子
public class RedDuck extends Duck{
pubilc void color(){
System.out.print("红色的鸭子");
}
setDuckFlyBehavior(new FlyDuck());
}
// 绿色不会飞的鸭子
public class GreenDuck extends Duck{
pubilc void color(){
System.out.print("绿色的鸭子");
}
setDuckFlyBehavior(new NoFlyDuck());
}
一个程序员的优秀不在于增加代码,而在于减少代码。