Java 策略枚举
策略枚举实际上是基于枚举类的一种策略模式的实现( 策略模式 ),例如我们需要实现一个计算器,采用策略模式是这样的:
public interface IStrategy {
//策略需要执行的方法
public int exec(int a, int b);
}
创建具体的策略角色及加法和减法
/**
* 策略 A 加法
* @author TJD
*
*/
public class StrategyADD implements IStrategy {
@Override
public int exec(int a, int b) {
return a+b;
}
}
/**
* 减法策略
* @author TJD
*
*/
public class StrategySub implements IStrategy {
@Override
public int exec(int a, int b) {
return a - b;
}
}
封装角色。这里通过构造方法将具体的策略传入高层,而高层不用知道具体是哪种策略,只需要调用抽象策略的方法即可:
public class Calculator {
private IStrategy strategy;
public Calculator(IStrategy strategy) {
this.strategy = strategy;
}
//执行策略方法
public int exec(int a, int b){
return strategy.exec(a, b);
}
}
场景类:
public class TestMain {
public static void main(String[] args) {
Calculator calculator = null;
IStrategy streadd = new StrategyADD();//创建加法策略;
calculator = new Calculator(streadd);//切换策略
int add = calculator.exec(20, 30);
System.out.println("20 + 30 = " + add);
IStrategy stresub = new StrategySub();//创建减法策略;
calculator = new Calculator(stresub);//切换策略
int sub = calculator.exec(20, 30);
System.out.println("20 - 30 = " + sub);
}
}
以上为策略模式传统的实现方式,肯定很多人能看出来这个策略模式有很多缺点,虽然便于扩展,但是每一个策略都是一个类,这个先不说,下来看一下很牛逼的策略枚举。
策略枚举
我们可以使用枚举在一个类中实现以上所有的功能及三种不同的角色,对不熟悉枚举的小伙伴可以查阅资料,下来看看通过枚举实现策略模式:
package design.strategy.c002;
/**
* 策略枚举
* @author yanwenfei
*/
public enum Calculator {
ADD("+") {
@Override
public int exec(int a, int b) {
// TODO Auto-generated method stub
return a+b;
}
},
SUB("-") {
@Override
public int exec(int a, int b) {
// TODO Auto-generated method stub
return a-b;
}
};
public abstract int exec(int a, int b);
//运算符
private String value = "";
private Calculator(String value) {
this.value = value;
}
public String getValue() {
return value;
}
}
场景类:
public class TestMain {
public static void main(String[] args) {
int add = Calculator.ADD.exec(10, 30);
System.out.println("10 + 30 = "+add);
int sub = Calculator.SUB.exec(10, 30);
System.out.println("10 - 30 = "+sub);
}
}
这里已经结束了,感觉是不是很爽,简直太爽了,通过枚举的使用,在一个类中就完美的实现了策略模式
在枚举类中,定义的抽象方法就像当时之前的接口,每一个枚举 ADD SUB 相当是一个具体的实现类(策略角色),而整个枚举类就是策略的分装角色。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

上一篇: Java 注解详解
下一篇: 谈谈自己对于 AOP 的了解
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论