Идея использования и интерфейса для связи заключается в создании более чистого и многократно используемого кода.
Независимо от того, кто реализует метод void (строковые данные) , ваш код не сломается. Неважно, реализовано ли оно Деятельностью, Фрагментом, Службой или любым другим объектом.
Это принцип чистой архитектуры. Конечно, он будет работать без интерфейса и просто , ссылаясь непосредственно на MainActivity, путем изменения переменной c в Fragment1.java на тип объекта MainActivity и полного удаления интерфейса , как вы сказали. Но если вы хотите изменить свою архитектуру или использовать ее в другом месте, вам нужно будет выполнить рефакторинг всего кода.
Этот пример может прояснить это для вас:
Предположим, вы используете Pigeon в качестве мессенджера для отправки сообщения . Если вы считаете, что Pigeon как Java-класс, он может иметь метод
void sendMessage (String msg);
Кроме того, этот метод может быть частью интерфейса с именем Messenger , а Pigeon может его реализовать:
public interface Messenger{
void sendMessage (String msg);
}
public class Pigeon implements Messenger{
void sendMessage (String msg){
// Some logic to send a message with a Pigeon
}
}
И где-то в вашем приложении вы можете отправить сообщение вроде:
public class BlankFragment extends Fragment{
Messenger sender;
(...)
public void onActivityCreated( Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
sender.sendMessage("Hello World");
}
Таким образом, ваше приложение будет отправлять Messenge (независимо от того, как), пока существует объект sender , который реализует Messenger .
Если в будущем вы захотите использовать Ворон для отправки сообщения вместо Голубь , пока Ворон также реализует Мессенджер интерфейс, ваш фрагмент не сломается.
Поскольку ваш фрагмент не зависит от Pigeon и Raven , он зависит от Messenger ... Любого класса, который реализует Messenger является действительным кандидатом для отправки сообщения с точки зрения вашего фрагмента.
Вы также должны прочитать о внедрении зависимости