问题:针对特定任务存在多种算法,调用者需要根据上下文环境动态的选择和切换。
Strategy模式:定义一个算法的接口,每个算法用一个类来实现,客户端针对接口编写程序。
图示如下:
Stategy接口:算法接口;
ConcreteStategyA类:具体算法A;
ConcreteStategyB类:具体算法B;
ConcreteStategyC类:具体算法C;
Context类:上下文语境。
举例:
Stategy接口:
public interface PaymentStategy { // Stategy接口
public void pay(int amount);
}
ConcreteStategyA类:
public class CreditCardStrategy implements PaymentStategy { // ConcreteStategyA类
@Override
public void pay(int amount) {
System.out.println(amount + " paid with cradit card");
}
}
ConcreteStategyB类:
public class PaypalStrategy implements PaymentStategy { // ConcreteStategyB类
@Override
public void pay(int amount) {
System.out.println(amount + " paid using Paypal");
}
}
Context类:
public class ShoppingCard { // Context类
public void pay(int amount, PaymentStategy paymentStategy) {
paymentStategy.pay(amount);
}
public static void main(String[] args) {
ShoppingCard shoppingCard = new ShoppingCard();
shoppingCard.pay(10, new CreditCardStrategy());
shoppingCard.pay(20, new PaypalStrategy());
}
}
结果:
10 paid with cradit card
20 paid using Paypal