接口允许您在运行时提供不同的实现,注入依赖项,单独的关注点,使用不同的实现进行测试。
只需将接口视为类保证实现的契约即可。实现该接口的具体类无关紧要。不知道这是否有帮助。
想出一些代码可能会有所帮助。这并不能解释界面的所有内容,请继续阅读,但我希望这可以帮助您入门。这里的重点是您可以更改实现…
package stack.overflow.example;public interface IExampleService {void callExpensiveService();}public class TestService implements IExampleService {@Overridepublic void callExpensiveService() { // This is a mock service, we run this as many // times as we like for free to test our software}}public class ExpensiveService implements IExampleService {@Overridepublic void callExpensiveService() { // This performs some really expensive service, // Ideally this will only happen in the field // We'd rather test as much of our software for // free if possible.}}public class Main {public static void main(String[] args) { // In a test program I might write IExampleService testService = new TestService(); testService.callExpensiveService(); // Alternatively, in a real program I might write IExampleService testService = new ExpensiveService(); testService.callExpensiveService(); // The difference above, is that we can vary the concrete // class which is instantiated. In reality we can use a // service locator, or use dependency injection to determine // at runtime which class to implement. // So in the above example my testing can be done for free, but // real world users would still be charged. Point is that the interface // provides a contract that we know will always be fulfilled, regardless // of the implementation.}}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)