eri*_*son 23
通过使用不同的服务对象可以获得不同的行为.实用程序类中的静态方法无法换出.这对于测试,更改实现和其他目的非常有用.
例如,您提到了CryptoUtil
一个encrypt
方法.拥有可支持不同加密策略,不同邮件收件人等的不同对象非常有用.
cle*_*tus 10
不同之处在于服务类可能具有状态.从州到我的意思是会话状态.考虑一个名义订购系统.
interface OrderSystem {
void login(String username, String password);
List<Item> search(String criteria);
void order(Item item);
void order(Item item, int quantity);
void update(Item item, int quantity);
void remove(Item item);
void checkout();
Map<Item, Integer> getCart();
void logout();
}
Run Code Online (Sandbox Code Playgroud)
这样的事情可以通过有状态会话bean来完成(作为一个例子),尽管在这种情况下,身份验证可能会涵盖更传统的EJB机制.
这里的要点是存在会话状态,因为一个呼叫的结果会影响后续呼叫.您可以将静态方法视为一组在本地执行的简单无状态服务.
服务具有更广泛的含义,包括但不限于:
我认为最好的做法是简单地使用静态方法作为便捷方法(特别是考虑到Java缺乏扩展方法).服务比这更丰富.
您无法覆盖静态方法,如果您想以两种不同的方式实现服务并在它们之间进行切换,这将是一个巨大的问题。出于这个原因,我将静态实用程序类的使用限制为简单的事情,这些事情将“不需要”(对于“ never”足够长的值:)需要以多种方式完成。