轻松掌握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,这样有更好的扩展性。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
相关文章
Java 类型相互转换byte[]类型,Blob类型详细介绍
这篇文章主要介绍了Java 类型相互转换byte[]类型,Blob类型的相关资料,需要的朋友可以参考下2016-10-10
spring AOP代理执行@EnableAspectJAutoProxy的exposeProxy属性详解
这篇文章主要为大家介绍了spring AOP代理执行@EnableAspectJAutoProxy的exposeProxy属性详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪2023-09-09
Java多线程并发编程(互斥锁Reentrant Lock)
这篇文章主要介绍了ReentrantLock 互斥锁,在同一时间只能被一个线程所占有,在被持有后并未释放之前,其他线程若想获得该锁只能等待或放弃,需要的朋友可以参考下2017-05-05
SpringBoot使用validation做参数校验的实现步骤
这篇文章主要介绍了SpringBoot使用validation做参数校验的实现步骤,帮助大家更好的理解和学习使用SpringBoot,感兴趣的朋友可以了解下2021-05-05


最新评论