2012-11-22 43 views
0

我有一个webapp运行在我的服务器上,它有一些余额更新。一旦平衡更新,我需要检查,如果平衡低于5000的情况下,平衡低于5000,我应该发送警报电子邮件。这里要注意的一点是,我需要在一天内只发送一次一次,每次余额低于5000时警报不应该继续。 我相信,我应该使用单身模式发送邮件,但是我不知道如何使用这个。 程序当看到余额低于5000时,应调用具有发送电子邮件警报功能的单例类,但是如何确保程序在余额下降时不会再次调用该函数? 任何人都可以指导我吗?使用Singleton模式的电子邮件

+0

请尝试使用的东西下面的答案,如果你面对任何问题,试图得到帮助... ... – sunleo

回答

0

你还需要考虑两个独立的东西:

  • 电子邮件发送服务。

多种方法来实现它。是的,它可能是Singleton,但它也可能是普通的Java服务。如果你使用Spring,那么他们有非常简单和有用的预定义实现。这是一个example

  • 你的支票余额逻辑。

取决于你真正需要的。如果您需要检查每一个资产负债更新,但发送警报不多于每天一次,那么这将是这样的:

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(); 
     } 
    } 
    } 
+0

感谢这个建议,但它意味着每个警报后,我不得不更新与此lastAlertDate数据库。我可以尝试以某种方式在这里使用辛格尔顿吗? – Akshay

+0

这取决于您使用这种“检查器”的组件类型。它可以简单地“活”在系统的内存中(例如作为一个监听器)并存储对最新日期的引用。在这种情况下你不需要DB。 – udalmik

0

Singleton是一种设计模式,确保只创建一个对象的一个​​实例。

不听起来像它有什么关系,你需要什么,你可以在你的数据库中添加一个标志像alert_sent=true/false并相应地更新它。

1

singleton pattern是限制一个类的实例化到一个对象的设计模式。当需要确切的一个对象来协调整个系统的操作时,这非常有用。

但对于您的要求,我不知道可以它将帮助。也许你可以使用一些国旗的概念。国旗应该每天清除。

0

您不需要任何“特殊”设计模式。例如,你可以存储在最后一封电子邮件,通知发送,例如日期:

Date lastEmail = ... // last email date 

,并试图发送电子邮件时chekc条件:

If(...) // lastEmail is before current day 
{ //send emal and update lastEmail }