设计模式——策略模式

什么是策略模式?

策略模式属于对象的行为模式。其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。

举个例子?

Image.png

常规代码实现方式

// 第一种
switch("出行方式") {
    case "高铁": {
        "坐高铁咯!";
        break;
    }
    case "飞机": {
        "坐飞机咯!";
        break;
    }
    case "火车": {
        "坐火车咯!";
        break;
    }
    case "汽车": {
        "坐汽车咯!";
        break;
    }
    default: {
        "巴拉巴拉巴拉";
        break;
    }
}
// 第二种
if("出行方式" == "高铁") {
    "坐高铁咯!";
}
if("出行方式" == "飞机") {
    "坐飞机咯!";
}
if("出行方式" == "火车") {
    "坐火车咯!";
}
if("出行方式" == "汽车") {
    "坐汽车咯!";
}
复制代码

运用策略模式实现
1)写个接口

interface TravelOutside {
   void modeOfTravel();
}
复制代码

2)接口实现

// 高铁
public class HighSpeedRailway implements TravelOutside {
    @Override
    public void modeOfTravel() {
        System.err.println("高铁");
    }
}
// 飞机
public class Aircraft implements TravelOutside {
    @Override
    public void modeOfTravel() {
        System.err.println("飞机");
    }
}
// 火车
public class Train implements TravelOutside {
    @Override
    public void modeOfTravel() {
        System.err.println("火车");
    }
}
// 汽车
public class Automobile implements TravelOutside {
    @Override
    public void modeOfTravel() {
        System.err.println("汽车");
    }
}
复制代码

3)抽象类实现

public class Travel {
    // 出行方式接口
    TravelOutside travelOutside;
    // 设置出行方式
    public void setTravelOutside(TravelOutside travelOutside) {
        this.travelOutside = travelOutside;
    }
    // 选择出行方式
    public void travelStyle() {
        travelOutside.modeOfTravel();
    }
}
复制代码

4)使用

public static void main(String[] args) {
        Travel travel = new Travel();
        travel.setTravelOutside(new Aircraft());
        travel.travelStyle();
}
复制代码

控制台输出结果

Image.png

总结

策略模式涉及三个角色:
环境角色(Context):定义环境角色,负责和具体的策略类交互,内部持有一个策略类的引用,给客户端调用;
抽象策略角色(Strategy):定义抽象策略角色,通常情况下使用接口或者抽象类去实现;
具体策略(ConcreteStrategy)角色:定义具体策略角色(在定义飞机、高铁、火车、汽车具体的策略)。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享