什么是策略模式,它又是能解决什么问题呢?相信都能看到这篇文章应该是已经了解了的,就不过多介绍了;
举个栗子:我们现在上课需要拿出课本朗读,但是不同的课程类型朗读的内容是不相同的,这时就可以把读书这个公共操作独立出来,让不同课程自己实现它自己要怎么去读这本书;
栗子很烂,不过通俗易懂。
1、结构说明
1)策略接口,比如:读书接口;
2)策略接口的实现类,即读什么书,语文、数学或者英语;
3)策略抽象类,这一层当然是可以去掉的,用来保护策略接口,提取策略类公共方法;
4)策略类型枚举类,通过枚举值来唯一标识每一个策略;
5)策略工厂上下文,在这个类中初始化各个策略类型在容器中,根据标识来确定走哪种具体的策略。
2、策略模式实现
1.准备策略类型的枚举类,后面会用于区分各个策略;
2.策略接口类,具体策略方法的来源;
3.策略抽象类,用来保护具体的策略方法;
4.具体的策略类,语文策略类,数学策略类,英语策略类;
5.策略工厂上下文类,使用了@PostConstruct 初始化各个策略类型到容器中;
整个策略代码已经写完了,现在开始单元测试
@Test
public void read(){
String chinese = "语文真有趣!";
String math = "1+1=3";
String english = "english is funny";
readBookContext.readBook(BookKindEnum.CHINESE.getCode(), chinese);
readBookContext.readBook(BookKindEnum.MATH.getCode(), math);
readBookContext.readBook(BookKindEnum.ENGLISH.getCode(), english);
}
结果展示
可能你们会疑惑为什么主要策略代码不贴出来,就贴一个单元测试?
别急,作者有话要说。
其实在我看来,自己手动敲一遍才能去更好的理解这些代码为什么要这样去写,看一百遍不如写一遍,在理解之后使用起来就会更加得心应手,手未动,码已出。