介绍
* 策略模式是指对一系列的算法定义,并将每一个算法封装成一个类,而且它们还可以相互替换
优点
* 简化单元测试,因为每个算法都是一个独立的类
* 减少了算法类和使用算法类的耦合性
* 提高了算法的重用性
* 减少了条件语句
缺点
* 策略模式并没有解决客户端要选择创建那个依赖的压力,但是可以通过 策略模式+简单工厂模式 来减轻客户端的职责
使用场景
* 同一个目的,不同的实现
* 需要在不同情况下使用不同的策略(算法),或者策略还可能在未来用其它方式来实现
* 对客户隐藏具体策略(算法)的实现细节,让其彼此完全独立。
入门案例:
UML图解:
代码:
TravelStrategy
/**
* 旅行策略接口(
*/
public interface TravelStrategy {
void goTrave();
}
Walk
public class Walk implements TravelStrategy {
@Override
public void goTrave() {
System.out.println("走路去旅行");
}
}
Drive
public class Drive implements TravelStrategy {
@Override
public void goTrave() {
System.out.println("开车去旅行");
}
}
Plane
public class Plane implements TravelStrategy {
@Override
public void goTrave() {
System.out.println("坐飞机旅行");
}
}
Person
public class Person {
private TravelStrategy travelStrategy;
public Person(TravelStrategy travelStrategy){
this.travelStrategy = travelStrategy;
}
public void goTrave(){
travelStrategy.goTrave();
}
}
Main
public class Main {
public static void main(String[] args){
// Person person = new Person(new Walk());
Person person = new Person(new Plane());
person.goTrave();
}
}