策略模式

类图

代码

Stragegy

1
2
3
interface Vehicle{
String getName();
}

ConreteStrategy1

1
2
3
4
5
6
7
class Car implements Vehicle{

@Override
public String getName() {
return "汽车";
}
}

ConreteStrategy2

1
2
3
4
5
6
class Bicycle implements Vehicle{
@Override
public String getName() {
return "自行车";
}
}

Context

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Person{

private Vehicle vehicle;

public Vehicle getVehicle() {
return vehicle;
}

public void setVehicle(Vehicle vehicle) {
this.vehicle = vehicle;
}

public void travel(){
System.out.println("开始旅行,使用交通工具:" + vehicle.getName());
}
}

测试类

1
2
3
4
5
6
7
8
9
10
11
12
public class Main {
public static void main(String args[]){
Car car = new Car();
Bicycle bicycle = new Bicycle();

Person person = new Person();
person.setVehicle(car);
person.travel();
person.setVehicle(bicycle);
person.travel();
}
}

总结

优点

  1. 策略模式提供了一个算法或者行为族的定义
  2. 使用策略模式可以一定程度避免if-else语句

缺点

  1. 客户端必须知道具体算法的区别,才用选择对应的策略进行使用