策略模式:定义一系列的算法,并将每个算法封装起来,可以使他们相互替换,让算法独立于使用它的客户而独立变化。
策略模式几个组成组件:
1.Context:算法调用者,使用setStrategy方法灵活的选择策略(strategy);
2.Strategy:算法的统一接口;
3.ConcreteStrategy: 算法的具体实现
示例:在不同商家买苹果
Strategy:算法接口
public interface BuyApple {
void buyApple();
}
ConcreteStrategy:算法具体实现
public class Merchant1 implements BuyApple{
@Override
public void buyApple() {
System.out.println("商家1买苹果");
}
}
public class Merchant2 implements BuyApple {
@Override
public void buyApple() {
System.out.println("商家2买苹果");
}
}
Context:算法调用者
public class Buyer {
BuyApple buyApple;
public void setBuyApple(BuyApple buyApple){
this.buyApple = buyApple;
}
public void merchantSelection(){
buyApple.buyApple();
}
public static void main(String[] args) {
Buyer buyer = new Buyer();
buyer.setBuyApple(new Merchant1());
buyer.merchantSelection();
}
策略模式的使用场景:
针对同一类型的问题有多种处理方式,仅仅在具体实现上有不同的方式;
出现同一抽象类有多个子类,而又需要使用 if-else 或者 switch-case 来选择具体子类时。
网友评论