Як і у багатьох випадках, правильний підхід залежить від того, що ви намагаєтесь зробити для конкретної кнопки та що ще ви робите з діяльністю.
Клас діяльності реалізує інтерфейс :
Це хороший варіант, коли у вас є лише один тип завдань, який потрібно виконати, коли цей слухач викликається. Прикладом цього може бути проста форма з кількістю полів та кнопкою збереження. Я вважаю за краще, щоб мій слухач події не перевіряв джерело події, щоб вирішити, що насправді потрібно зробити. Я знаю, що деякі можуть сказати, що це річ у стилі, але я вважаю, що не вимагаючи від слухача цього перевірки, полегшується виконання коду, оскільки ви точно знатимете, що викликається для кожної події.
Інший інтерфейс реалізує клас :
Як я вже говорив вище, я вважаю за краще цей варіант, коли у мене є кілька елементів, які можуть викликати одну і ту ж подію. Розширюючи вищенаведений приклад, можна додати чітку кнопку, яка також потребує прослуховувача кліків. Створіть одного слухача, який попередньо виконує дії збереження, і того, хто попередньо виконує чіткі дії. Кожен слухач додається лише до компонентів, які вироблятимуть цю дію.
Ця реалізація має додаткову перевагу, яку ви можете скористатись, якщо піклуєтеся. Перевага полягає в тому, що вона не дозволяє іншим класам викликати подію всередині вашого класу активності. Оскільки метод інтерфейсу повинен бути загальнодоступним, будь-який, хто має посилання на клас, може запустити подію. Якщо ви хочете чітко контролювати, хто може робити те, що в програмі, окремий клас не дозволяє комусь із посиланням на діяльність викликати очищення або збереження вашої форми (або потенційно може порушити код, якщо слухач використовує джерело, але робить не обробляти погане введення).
Анонімний внутрішній клас реалізує інтерфейс :
Це дійсно просто специфічний спосіб побудови другого варіанту використання іншого класу як реалізації. Цей параметр може ще більше обмежити, хто має доступ для запуску події, оскільки ніхто інший не може створити екземпляр класу. Однак я думаю, що більш важливим фактором між цими двома варіантами є те, наскільки робиться робота. Очищення кількох текстових полів - це проста та прямолінійна операція. Однак процес збереження файлу for може включати в себе ряд завдань: ви перевіряєте вхід (що вам слід зробити), записуєте в базу даних для зберігання значень і запускаєте деяку дію після збереження. У цьому випадку створення окремого класу з власним файлом забезпечить чіткіший поділ між формою введення та обробкою даних. Це, в свою чергу, зберігає код форми замість більшого файлу з кількома внутрішніми класами, вкладеними всередині.