Кофе-брейк #186. Шаблон проектирования Наблюдатель (Observer). Как инициализировать ArrayList в Java

Статья из группы Random

Шаблон проектирования Наблюдатель (Observer) в Java

Источник: Medium Благодаря этому руководству вы ознакомитесь с примером работы шаблона проектирования Наблюдатель (Observer) на языке программирования Java. Кофе-брейк #186. Шаблон проектирования Наблюдатель (Observer). Как инициализировать ArrayList в Java - 1Шаблон проектирования Наблюдатель (Observer) — это поведенческий паттерн, который позволяет объекту (известному как subject) уведомлять другие объекты (известные как observers, наблюдатели) об изменении своего состояния. Он может быть полезен, если вы хотите синхронизировать несколько объектов, но желаете избежать ручного обновления каждого объекта при изменении состояния субъекта. В Java шаблон проектирования Наблюдатель (Observer) реализован с использованием интерфейса Observer. Он определяет общий интерфейс для всех различных наблюдателей, которые могут быть уведомлены об изменении состояния субъекта. Субъект представлен классом Subject, который поддерживает список наблюдателей и предоставляет методы для присоединения и отсоединения наблюдателей. Вот пример того, как вы можете реализовать шаблон проектирования Observer в Java:

public interface Observer {
  public void update(Subject subject);
}
public class ConcreteObserverA implements Observer {
  public void update(Subject subject) {
    // Обновляем наблюдатель A на основе состояния субъекта
  }
}
public class ConcreteObserverB implements Observer {
  public void update(Subject subject) {
    // Обновляем наблюдатель B на основе состояния субъекта
  }
}
public class Subject {
  private List<Observer> observers = new ArrayList<>();
  public void attach(Observer observer) {
    this.observers.add(observer);
  }
  public void detach(Observer observer) {
    this.observers.remove(observer);
  }
  public void notifyObservers() {
    for (Observer observer : this.observers) {
      observer.update(this);
    }
  }
  // Другие методы, связанные с состоянием субъекта
}
Чтобы использовать шаблон Наблюдатель (Observer), вы должны сначала создать экземпляры классов Subject и Observer. Затем вы прикрепляете наблюдателя к субъекту, используя на субъекте метод attach. Когда состояние субъекта меняется, вы должны вызвать для субъекта метод notifyObservers, что приведет к обновлению прикрепленных наблюдателей. Далее вы можете отсоединить наблюдателя от субъекта, используя на субъекте метод detach.

Как инициализировать ArrayList в Java

Источник: Asyncq В этой статье рассмотрены 8 различных способов инициализации структуры данных ArrayList. Инициализация ArrayList является одним из этапов создания масштабируемого программного обеспечения на языке Java. Кофе-брейк #186. Шаблон проектирования Наблюдатель (Observer). Как инициализировать ArrayList в Java - 2

Методы инициализации

1. Использование метода Arrays.asList

Пакет java.util, в котором находится класс Arrays, предоставляет различные методы, доступные для работы со структурой данных Array. Одним из наиболее известных среди них является преобразование массива (Array) в список (List) с помощью метода Arrays.asList.

List<String> countries;
countries = Arrays.asList("EUR", "USD", "INR", "JPY");

2. Использование анонимного внутреннего класса

Также мы можем инициализировать ArrayList с помощью анонимного класса.

List<String> countries;
countries = new ArrayList<>(){{
             add("EUR");
             add("INR");
             add("USD");
             add("JPY");
}};

3. Общий способ инициализации

Один из распространенных способов, которым многие разработчики инициализируют ArrayList, — это создание объекта ArrayList и последующий вызов метода add.

List<String> countries;
countries = new ArrayList<>();
countries.add("EUR");
countries.add("USD");
countries.add("INR");
countries.add("JPY");

4. Использование метода List.of

Java 9+ предоставляет фабричные методы, которые возвращают неизменяемую коллекцию (immutable collection). Чтобы получить неизменяемый список, мы можем использовать метод List.of.

List<String> countries;
countries = List.of("EUR", "USD", "INR", "JPY");

5. Инициализация ArrayList из массива

Кроме того, мы можем инициализировать ArrayList из массива, просто передав его как параметр конструктору ArrayList.

List<String> countries;
String[] countryArr = {"EUR", "USD", "INR", "JPY"};
countries = Arrays.asList(countryArr);

6. Инициализация ArrayList потоковым массивом (streaming array)

Если вам нравится lambda и stream, мы можем передать массив с помощью Arrays.stream, а затем собрать данные в List.

List<String> countries;
countries = Arrays.stream(countryArr).collect(Collectors.toList());

7. Инициализация ArrayList из Set

Существует также способ инициализации ArrayList из Set. Для этого нам нужно передать его как параметр конструктора в ArrayList.

List<String> countries;
Set<String> set = Set.of("EUR", "USD", "INR", "JPY");
countries = new ArrayList<>(set);

8. Инициализация ArrayList из стека

Мы можем инициализировать ArrayList из Stack. Для этого нужно передать стек в качестве параметра конструктора в ArrayList.

List<String> countries;
 Stack<String> stack = new Stack<>(){{
            push("EUR");
            push("USD");
            push("INR");
            push("JPY");
 }};
 
countries = new ArrayList<>(stack);

Заключение

Сегодня мы рассмотрели различные способы инициализации ArrayList. Как видите, для этого мы можем использовать как традиционные методы, а также новые функции Java. Мой личный фаворит — List.of фабричного метода, чтобы получить неизменяемый список. Но если мне нужен изменяемый список, я бы использовал Arrays.asList.
Комментарии (1)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
opsdkej dkfjidyfe Уровень 1
20 декабря 2022
Сегодня мы рассмотрели различные способы инициализации ArrayList.........