Внимательно изучила, и, вроде бы, поняла, как работает. Хочется какой-нибудь код написать в main, для наглядности, но навыков не хватает. Помогите, пожалуйста. public class Solution { private List<Task> tasks; private List<String> names; private DbDataProvider taskDataProvider = new TaskDataProvider(); private DbDataProvider nameDataProvider = new NameDataProvider(); private class TaskDataProvider implements DbDataProvider<Task> { @Override public void refreshAllData(Map criteria) { tasks = MockDB.getFakeTasks(criteria); } } private class NameDataProvider implements DbDataProvider<String> { @Override public void refreshAllData(Map criteria) { names = MockDB.getFakeNames(criteria); } } public void refresh() { Map taskCriteria = MockView.getFakeTaskCriteria(); taskDataProvider.refreshAllData(taskCriteria); Map nameCriteria = MockView.getFakeNameCriteria(); nameDataProvider.refreshAllData(nameCriteria); } private interface DbDataProvider<T> { void refreshAllData(Map criteria); } class Task { } public static void main(String[] args) { } public class MockView { private static final Map FAKE_TASK_CRITERIA = new HashMap(); private static final Map FAKE_NAME_CRITERIA = new HashMap(); public static Map getFakeTaskCriteria() { return FAKE_TASK_CRITERIA; } public static Map getFakeNameCriteria() { return FAKE_NAME_CRITERIA; } public class MockDB { private static final List<Solution.Task> FAKE_TASKS = new ArrayList<>(); private static final List<String> FAKE_NAMES = new ArrayList<>(); public static List<Solution.Task> getFakeTasks(Map criteria) { return MockView.getFakeTaskCriteria().equals(criteria) ? FAKE_TASKS : null; } public static List<String> getFakeNames(Map criteria) { return MockView.getFakeNameCriteria().equals(criteria) ? FAKE_NAMES : null; } } } }