Java 策略枚举

发布于 2024-02-27 05:56:55 字数 2736 浏览 49 评论 0

策略枚举实际上是基于枚举类的一种策略模式的实现( 策略模式 ),例如我们需要实现一个计算器,采用策略模式是这样的:

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

挖鼻大婶

暂无简介

文章
评论
27 人气
更多

推荐作者

櫻之舞

文章 0 评论 0

弥枳

文章 0 评论 0

m2429

文章 0 评论 0

野却迷人

文章 0 评论 0

我怀念的。

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文