策略模式
2021-10-09 本文已影响0人
CodeYang
策略模式
百度百科:策略模式作为一种软件设计模式,指对象有某个行为,但是在不同的场景中,该行为有不同的实现算法。比如每个人都要“交个人所得税”,但是“在美国交个人所得税”和“在中国交个人所得税”就有不同的算税方法。
组成
- 抽象策略角色: 策略类,通常由一个接口或者抽象类实现。
- 具体策略角色:包装了相关的算法和行为。
- 环境角色:持有一个策略类的引用,最终给客户端调用
示例代码
/**
* 策略模式
*/
public class Test implements Cloneable {
public static void main(String[] args) throws CloneNotSupportedException {
Context context1 = new Context(new AirWay());
context1.travel(100);
Context context2 = new Context(new TrainWay());
context2.travel(100);
Context context3 = new Context(new BicycleWay());
context3.travel(100);
}
}
class Context{
private TravelStrategy travelStrategy;
public Context(TravelStrategy travelStrategy) {
this.travelStrategy = travelStrategy;
}
public void travel(int money){
travelStrategy.travelWay(money);
}
}
/**
* 出行旅游 策略
*/
interface TravelStrategy{
void travelWay(int money);
}
class AirWay implements TravelStrategy{
@Override
public void travelWay(int money) {
System.out.println("乘坐飞机旅游,需要花费:"+(money*2));
}
}
class TrainWay implements TravelStrategy{
@Override
public void travelWay(int money) {
System.out.println("乘坐火车旅游,需要花费:"+money);
}
}
class BicycleWay implements TravelStrategy{
@Override
public void travelWay(int money) {
System.out.println("骑自行车旅游,需要花费:"+(money/2));
}
}
运行结果
image.png