Есть ли
Шаблон проектирования интерфейса для класса.
В настоящее время я присоединяюсь к новой компании. И их шаблон дизайна:
Шаблон проектирования «Интерфейс с классом».
Но я не знаю никакого интерфейса для шаблона проектирования классов...
Кто-нибудь использует интерфейс для класса шаблона проектирования...
Вы пробовали спросить кого-нибудь в компании, что это значит? Они дадут более авторитетный ответ, а также ответят быстрее. Предположим, вы попытались найти ответ в Интернете, но ничего не нашли. Показывает, что у вас была инициатива попытаться разобраться во всем самостоятельно, но вы не боитесь задавать вопросы, когда вы застряли. Я попробовал погуглить "Interface to Class" spring-boot
и не получил результатов. Так что справедливо будет сказать, что они используют малоизвестное название для того, что, вероятно, является довольно распространенным шаблоном проектирования.
Класс интерфейса к обычно используется шаблоном, особенно в JAVA/Spring-Boot, поскольку он поддерживает концепцию слабой связи. В этом шаблоне
Ниже приведен простой код, демонстрирующий интерфейс шаблона класса.
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);
Обратите внимание: как и выше, мы создали конструктор интерфейса, а не класс реализации. В чем его преимущества:
Какой смысл это делать? Когда между классом и интерфейсом всегда существует точное отношение 1 к 1, вы можете использовать класс напрямую.
@Sören вот пример, если только один класс реализует интерфейс. Но мы можем заставить несколько классов реализовать один и тот же интерфейс.
Спасибо за подтверждение того, что этот шаблон, описанный в этом ответе, бессмысленен.
@Sören Также полезно в случае отношения 1-к-1. Предположим, вы переносите базу данных из одной в другую. Вы должны создать другой класс, реализующий интерфейс, и построить там логику. Нет необходимости вносить какие-либо изменения, кроме внедрения зависимостей.
От
java.util.List
доArrayList
, вероятно, самый распространенный интерфейс класса.