1. 背景
假设现在有这么一个方法
public class GetMoney {
public int getMoney(String way, int distance) {
int money = 0;
switch (way) {
case "test01":
money = distance + 1;
break;
case "test02":
money = distance + 2;
break;
case "test03":
money = distance + 10;
break;
default:
break;
}
return money;
}
}
这个类承担的职责较多,违反了单一职责原则。 如何去改某一规则,又违反开闭原则;
2. 策略模式实现
2.1 接口
/**
* @author wql
* @date 2022/3/27 18:27
*/
public interface Money {
public int getmoney(int distance);
}
2.2 实现类1
public class Test01 implements Money {
@Override
public int getmoney(int distance) {
return distance < 10 ? 4 : 6;
}
}
2.3 实现类2
public class Test02 implements Money {
@Override
public int getmoney(int distance) {
return distance < 10 ? 4 : 6;
}
}
2.4 实现类3
public class Test03 implements Money {
@Override
public int getmoney(int distance) {
return distance < 10 ? 4 : 6;
}
}
2.5 改造原来的获取方法
public class GetMoney {
public int getMoney(Money money, int distance) {
return money.getmoney(distance);
}
}
2.6 测试
public class TestMain {
public static void main(String[] args) {
GetMoney getMoney=new GetMoney();
getMoney.getMoney(new Test01(), 10);
getMoney.getMoney(new Test02(), 10);
getMoney.getMoney(new Test03(), 10);
}
}