Шаблон проектирования интерфейса для классов.... Кто-нибудь использует шаблон проектирования интерфейса для классов?

Есть ли

Шаблон проектирования интерфейса для класса.

В настоящее время я присоединяюсь к новой компании. И их шаблон дизайна:

Шаблон проектирования «Интерфейс с классом».

Но я не знаю никакого интерфейса для шаблона проектирования классов...

Кто-нибудь использует интерфейс для класса шаблона проектирования...

От java.util.List до ArrayList, вероятно, самый распространенный интерфейс класса.

Gilbert Le Blanc 29.06.2024 10:46

Вы пробовали спросить кого-нибудь в компании, что это значит? Они дадут более авторитетный ответ, а также ответят быстрее. Предположим, вы попытались найти ответ в Интернете, но ничего не нашли. Показывает, что у вас была инициатива попытаться разобраться во всем самостоятельно, но вы не боитесь задавать вопросы, когда вы застряли. Я попробовал погуглить "Interface to Class" spring-boot и не получил результатов. Так что справедливо будет сказать, что они используют малоизвестное название для того, что, вероятно, является довольно распространенным шаблоном проектирования.

Dunes 29.06.2024 12:37
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
2
51
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Класс интерфейса к обычно используется шаблоном, особенно в JAVA/Spring-Boot, поскольку он поддерживает концепцию слабой связи. В этом шаблоне

  1. Вы создаете интерфейс с необходимыми методами
  2. Создайте класс реализации, который реализует созданный выше интерфейс.
  3. Третий шаг при использовании значения класса реализации. Вместо использования интерфейса класса реализации.

Ниже приведен простой код, демонстрирующий интерфейс шаблона класса.

public interface UserMethod {
User getUser();
boolean saveUser(User user);

}

Теперь создайте для него класс реализации.

 public class UserDatabase implements UserMethod{
   @Override
    public User getUser() {
       //Do your logic for getting user
    }

    @Override
    public boolean saveUser(User user) {
       //Do logic to save user
    }
}

public class MongoUserDatabase implements UserMethod {
@Override
public User getUser(String id) {
    // MongoDB query to get user
}

@Override
public boolean saveUser(User user) {
    // MongoDB operation to save user
}

}

public class UserService {

    private final UserMethod userMethod;

    public UserService(UserMethod userMethod) {
        this.userMethod = userMethod;
    }

    public User getUser(String id) {
        return userMethod.getUser(id);
    }

    public boolean saveUser(User user) {
        return userMethod.saveUser(user);
    }
}


UserMethod userMethod = new UserDatabase();
UserService userService = new UserService(userMethod);

// After migration
UserMethod userMethod = new MongoUserDatabase();
UserService userService = new UserService(userMethod);

Обратите внимание: как и выше, мы создали конструктор интерфейса, а не класс реализации. В чем его преимущества:

  • Предположим, в будущем мы хотим использовать другую базу данных для изменения логики внутри методов getUser() и saveUser() или. Таким образом, изменится только код вашего класса реализации, не затрагивая какой-либо другой код. Это обеспечивает концепцию слабой связи.

Какой смысл это делать? Когда между классом и интерфейсом всегда существует точное отношение 1 к 1, вы можете использовать класс напрямую.

Sören 29.06.2024 13:04

@Sören вот пример, если только один класс реализует интерфейс. Но мы можем заставить несколько классов реализовать один и тот же интерфейс.

Suman Devkota 29.06.2024 13:17

Спасибо за подтверждение того, что этот шаблон, описанный в этом ответе, бессмысленен.

Sören 29.06.2024 13:28

@Sören Также полезно в случае отношения 1-к-1. Предположим, вы переносите базу данных из одной в другую. Вы должны создать другой класс, реализующий интерфейс, и построить там логику. Нет необходимости вносить какие-либо изменения, кроме внедрения зависимостей.

Suman Devkota 29.06.2024 13:28

Другие вопросы по теме