文章目录
前言
你是否被一群if else 所烦恼 可能前边写代码一时爽 后边添加逻辑更改需求火葬场?
有时候要处理分类的问题 你的代码就是一群switch 和case 稍微一不小心改错了 全部GG 随着需求增加 每个case变得臃肿不堪 那个时候有没有想过有些优雅的方式来解决case泛滥这个问题呢?
很多时候 状态 策略都具有一些类似的 共性的特征 但是代码上还是不停的重复 你很想改变现状 想让代码简洁 但是无从下手。。
我们可以优雅的封装各个策略 这样策略形成了策略树(比如父策略 子策略) 同样我们可以封装状态 形成状态树 可以自顶而下 先规则 再具体变化 先提取共性再管特性 这些过去我们所学的方法 都是可行的
策略模式 —— 模板模式的改进
封装变化的设计原则 找到变化的部分 和不变的部分分开
之前是把回家的人做分类 现在需求增加 需要更细致的分辨度——回家方式
然后实现回家方式的自我组合
策略模式的核心是 对每种策略进行封装 使之相互交换 Travelable 策略接口 By air ByCoach ByTrain 不同的各种策略实现
而最终 PassengerByAirAndCoach 都是不同策略组合的产物
解决
public class PassengerByAirByCoach extends People {
private Travelable first;
private Travelable second;
public PassengerByAirAndCoach() {
first = new ByAir();
second = new ByCoach();
}
@Override
protected void travel(){
first.travel();
second.travel()