设计模式——策略模式
腾龙问天 人气:0
什么是策略模式?策略模式属于对象的行为模式。其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。举个例子?
![出行模式](https://img2020.cnblogs.com/blog/743076/202102/743076-20210228191713393-1708070535.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();
}
`
控制台输出结果
![控制台输出结果](https://img2020.cnblogs.com/blog/743076/202102/743076-20210228191653434-1951941659.png)
聊聊
策略模式设计三个角色:
环境角色(Context):定义环境角色,负责和具体的策略类交互,内部持有一个策略类的引用,给客户端调用;
抽象策略角色(Strategy):定义抽象策略角色,通常情况下使用接口或者抽象类去实现;
具体策略(ConcreteStrategy)角色:定义具体策略角色(在定义飞机、高铁、火车、汽车具体的策略)。
加载全部内容