Java中有很多设计模式,在网上也有很多设计模式的教程和资料,讲解的也比较详细,对我在学习中产生的问题提供了很大的帮助,但是经常有一些问题查了很多博客也无法再找到答案,所以我希望能填补一些这方面的空白,将我在日常学习过程的理解和想法写下来,并能和关心此类问题同学和朋友一起讨论一下。
设计模式是一套被反复使用,高效率、安全稳定且能解耦合,能够进行高效开发,降低代码冗余易于维护的一种编码习惯。本文将重点讨论设计模式中的策略模式。由于本文在技术实现上比较浅显,只包含策略模式基础简介和比较适合用法,适合新手学习和快速入门,如果您有更好的想法或者实现方式,欢迎在本文下留言或者通过longctw@outlook.com联系我。
**************请看下面内容*********************
一、简介
策略模式将可变的部分从程序中抽象分离成算法接口,在该接口下分别封装一系列的算法实现类并使它们可以相互替换,从而是客户端程序独立于算法的改变。每种实现是独立的、可执行的功能性单元。
策略模式要求实现同一接口的不同实现类之间功能相似,且不相互干扰,并可通过简单配置实现功能的切换。
二、一般应用
策略模式可通过配置、代码逻辑等改变功能模块,通过一个接口多个实现类,实现多套代码功能逻辑,可根据需求自由切换。
- 针对同一类型问题的多种处理方式,仅仅是具体行为有差别时;
- 需要安全地封装多种同一类型的操作时;
- 出现同一抽象类有多个子类,而又需要使用 if-else 或者 switch-case 来选择具体子类时。
UML类图
三、代码实现
接口
public interface Strategy {
/**
* 策略方法
*/
public void strategyInterface();
}
实现类1
/**
* 每个实现类时一块独立的功能单元,不依赖于其他的实现类
* 可通过改变接口的实现类,从而改变该接口的功能
*/
public class ConcreteStrategyA implements Strategy {
@Override
public void strategyInterface() {
//相关的业务
}
}
实现类2
public class ConcreteStrategyB implements Strategy {
@Override
public void strategyInterface() {
//相关的业务
}
}
三、总结
策略模式主要是为了实现多套功能逻辑,方便需要的时候进行切换和扩展