策略模式:
将一组特定的行为和算法封装成类。该类在不同的环境下,需要有不同的实现算法。也就是针对不同的事物情形,使用不同的方法。
比如网络小说阅读器的书单推广,根据不同性别用户推荐不同的算法。又或者网站根据浏览用户的不同,推送不同的商品。
策略模式的好处:
- 将逻辑与算法解耦。
- 依赖于接口,可以更好的组织公共代码,并且使用继承的话,可以将公共代码转移到父类里面,降低复杂度。
- 传统编码是使用大量的if else 判断,使用策略模式可以有效降低程序的多层选择。
- 实现IOC,倒置依赖,控制反转。业务逻辑需要的类由程序判断后初始化并传入,因为具体业务逻辑不需要初始化特定的类。
缺点: - 程序必须知道所有的算法。
- 算法会越来越多。
实现:
- 使用策略接口来约束行为。
- 新策略继承接口,并完成自身算法。
- 调用者根据情况分析使用何种策略。
类图:
package strategy;
public interface BookStrategy {
public String selectBook();
}
package strategy;
public class FemaleBookStrage implements BookStrategy {
@Override
public String selectBook() {
return "言情";
}
}
package strategy;
public class MaleBookStrategy implements BookStrategy{
@Override
public String selectBook() {
return "玄幻";
}
}
package strategy;
public class TestStrategy {
public static void test(String sex){
switch (sex){
case "male":
System.out.println(new MaleBookStrategy().selectBook());
break;
case "famale":
System.out.println(new FemaleBookStrage().selectBook());
break;
default:
System.out.println("we dont know");
}
}
}