为什么'Manager'类中的'getter'方法不是静态的?

Emm*_*uel 1 java maintainability

在大多数情况下,传统的编程智慧似乎不鼓励使用静态方法.通常,我有这些'经理',例如UserManager,AppointmentManager等,经理中的一个方法就是XXX getXXX(long xxxId)例如User getUser(long userId).我真的不明白为什么这不能成为静态方法.它看起来非常像工厂方法(la GoF工厂模式).很难放弃以下方便:

User user = UserManager.getUser(id);

并使用

UserManager userManager = new UserManager(); User user = userManager.getUser(userId);

代替.

PS我相信测试; 我不是一个'模拟测试'的粉丝,所以除了嘲笑我还需要理由.

das*_*ght 6

避免对象工厂中的静态方法的主要原因是保持状态的能力.虽然静态方法可以将其状态保持在静态字段中,但这种方法很难保存和重置工厂的状态.

此外,无法编程到工厂的接口,因为静态方法不能用作接口实现.当您需要将对象的实现透明地切换到应用程序的其余部分时,这一点变得非常重要.

最后,无论是否使用模拟,静态方法都会使测试代码变得更加困难.您的测试很难验证您的工厂的某些方法是按特定顺序调用的.