设计模式 ----------------策略模式

前言

《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());
}
posted @ 2021-06-22 17:31  忆小雨  阅读(40)  评论(0)    收藏  举报