我的服务器上运行了一个 webapp,它会更新一些余额。余额更新后,我需要检查余额是否低于 5000。如果余额低于 5000,我应该发送电子邮件警报。这里要注意的是,我每天只需要发送一次警报,每次余额低于 5000 时警报不应该一直持续。我相信我应该使用单例模式发送邮件,但我不是确定如何使用它。看到余额的程序低于 5000,应该调用具有发送电子邮件警报功能的单例类,但是如何确保当余额下降时程序不会再次调用该函数?有人可以指导我吗?
问问题
907 次
5 回答
1
单例模式 是一种将类的实例化限制为一个对象的设计模式。当需要一个对象来协调整个系统的动作时,这很有用。
但是对于您的要求,我不知道它是否会有所帮助。也许您可以使用一些标志概念。并且每天都要清旗。
于 2012-11-22T07:44:14.103 回答
0
单例是一种确保只创建一个对象实例的设计模式。
听起来它与你需要的东西没有任何关系,你可以在你的数据库中添加一个标志alert_sent=true/false
并相应地更新它。
于 2012-11-22T07:38:54.220 回答
0
于 2012-11-22T07:40:05.157 回答
0
您在这里不需要任何“特殊”设计模式。例如,您可以存储上次发送电子邮件通知的日期,例如:
Date lastEmail = ... // last email date
并且在尝试发送电子邮件时检查条件:
If( ... ) // lastEmail is before current day
{ //send emal and update lastEmail }
于 2012-11-22T07:44:26.553 回答
0
您需要考虑两件不同的事情:
- 电子邮件发送服务。
实现它的几种方法。是的,它可以是Singleton,但也可以是普通的 Java 服务。如果您使用Spring,那么它们具有非常简单且有用的预定义实现。这是一个例子。
- 您的检查余额逻辑。
取决于你真正需要什么。如果您需要检查每个余额更新但每天发送的警报不超过一次,那么它将类似于:
private Date lastAlertDate;
private static final BALANCE_LIMIT = 5000;
private void handleBalanceUpdated(long balance) {
if (balance < 5000) {
log.info("Balance has gone below {}", BALANCE_LIMIT);
int daysDifference = getDifferenceInDays(lastAlertDate, new Date());
if (daysDifference >= 1) {
log.info("Last alert was {} days ago, going to send email alert", daysDifference);
alertService.sendSimpleAlert("Balance has gone below " + BALANCE_LIMIT + "!");
lastAlertDate = new Date();
}
}
}
于 2012-11-22T08:17:52.600 回答