轻松掌握Java策略模式
定义:一个类的行为或其算法可以在运行时更改。在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。策略对象改变 context 对象的执行算法。
特点:
1、算法可以自由切换。
2、避免使用多重条件判断。
3、扩展性良好。
企业级开发和常用框架中的应用:java.servlet.http.HttpServlet的service方法
实例:对两个数的操作行为。
public class Demo { public static void main(String[] args) { Strategy strategy1 = new StrategyAdd(); Strategy strategy2 = new StrategyDiv(); Context context1 = new Context(strategy1); context1.execute(10, 5); context1 = new Context(strategy2); context1.execute(10, 5); } } interface Strategy{ public void doOperation(int num1,int num2); } class StrategyAdd implements Strategy{ public void doOperation(int num1, int num2) { System.out.println("执行加法"); System.out.println(num1+"+"+num2+"="+(num1+num2)); } } class StrategySub implements Strategy{ public void doOperation(int num1, int num2) { System.out.println("执行减法"); System.out.println(num1+"-"+num2+"="+(num1-num2)); } } class StrategyMul implements Strategy{ public void doOperation(int num1, int num2) { System.out.println("执行乘法"); System.out.println(num1+"*"+num2+"="+(num1*num2)); } } class StrategyDiv implements Strategy{ public void doOperation(int num1, int num2) { System.out.println("执行除法"); System.out.println(num1+"/"+num2+"="+(num1/num2)); } } class Context{ private Strategy strategy; public Context(Strategy strategy) { this.strategy = strategy; } public void execute(int num1,int num2){ strategy.doOperation(num1, num2); } }
策略模式强调的是运行时更改,可能在上面的代码中,这种运行时更改没有得到很好的体现,我们可以假设一个实际场景,就是当一个对象参数传到一个方法中来的时候,假设我们要根据参数的不同选择不同的方法,我们这是会考虑if-else来进行判断,而策略模式则是对这些if-else进行分类,每一个判断一个类,然后对象过来了,直接调用策略接口方法,而对象参数属于哪个具体类则是有jvm来判断,我们不必要去了解对象参数属性类型什么的,这样不仅简化了我们的开发工作,而且相比较于if-else,这样有更好的扩展性。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
相关文章
spring boot jpa写原生sql报Cannot resolve table错误解决方法
在本篇文章里小编给大家整理的是关于spring boot jpa写原生sql报Cannot resolve table错误的解决方法,需要的朋友学习下。2019-11-11MyBatis注解开发-@Insert和@InsertProvider的使用
这篇文章主要介绍了MyBatis注解开发-@Insert和@InsertProvider的使用,具有很好的参考价值,希望对大家有所帮助。2022-07-07详解IDEA中类加载器调用getResourceAsStream()方法需注意的问题
这篇文章主要介绍了详解IDEA中类加载器调用getResourceAsStream()方法需注意的问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2021-02-02Java+Selenium调用JavaScript的方法详解
这篇文章主要为大家讲解了java在利用Selenium操作浏览器网站时候,有时会需要用的JavaScript的地方,代码该如何实现呢?快跟随小编一起学习一下吧2023-01-01IDEA全量替换一次性解决旧项目并将所有文件换行符改为LF问题
这篇文章主要介绍了IDEA全量替换一次性解决旧项目并将所有文件换行符改为LF问题,非常不错,具有一定的参考借鉴价值,需要的朋友参考下2019-05-05Spring @ComponentScan注解使用案例详细讲解
@ComponentScan注解的作用可以简述为:将项目中所有被@Component注解直接或者间接标记的类---->组装成BeanDefinition---->然后以key=beanName, value=BeanDefinition的形式存储,为后续生成bean对象做准备2023-03-03SpringBoot @ControllerAdvice 拦截异常并统一处理
这篇文章主要介绍了SpringBoot @ControllerAdvice 拦截异常并统一处理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2020-09-09
最新评论