Источник: MediumПредставленное здесь руководство объясняет предназначение паттерна проектирования Factory на конкретном примере кода Java.
Что такое шаблон (паттерн) проектирования Factory и когда его нужно использовать? Давайте разберемся на примере. По своему опыту в разработке программного обеспечения, если я попытаюсь обобщить, какой шаблон проектирования чаще всего мною использовался, то Factory (фабричный) шаблон войдет в тройку лучших. Когда дело доходит до шаблонов Singleton или Builder, многие библиотеки предоставляют функциональность с помощью аннотаций. Тогда как фабричный шаблон проектирования — единственный, который вы должны реализовать самостоятельно.
Лучше всего понять это можно постановкой задачи на примере. Вот ситуация, когда вам нужно создать службу бронирования номеров в отеле, где есть три типа номеров: обычный номер, номер делюкс и виллы. Исходя из требований заказчика вы должны создать объект в своей программе.
Как мы видим, все три объекта должны расширять один и тот же интерфейс/класс, поскольку они имеют одинаковую функциональность. Итак, создадим интерфейс/класс Room.
Я не добавляю дополнительные функции в класс, поэтому мы можем сосредоточиться на шаблоне проектирования.
Теперь создадим класс для создания объектов комнат по требованию заказчика. Имя этого класса RoomFactory. Сначала посмотрите код, затем я поясню.
Это и есть фабричный класс, и я чувствую, что код многое объясняет сам по себе. Здесь у нас есть статический метод, и это единственный метод в этом классе, который принимает на входе строку и в соответствии с ней возвращает объект Room. Теперь любая библиотека использует этот класс и создает объект для комнаты.
Методы equal() и hashcode() в Java
Источник: MediumБлагодаря этой публикации вы узнаете о работе методов equal() и hashcode(), а также о способе их переопределения в коде Java.
Метод equals() в Java используется для определения равенства двух объектов. Он принадлежит к классу Object, являющемся корнем иерархии классов Java, и наследуется всеми классами Java. Метод equals() принимает объект в качестве аргумента и возвращает логическое значение, указывающее, равен ли этот объект вызываемому объекту.
Метод hashCode() используется для возврата значения хеш-кода для объекта. Хэш-код — это числовое значение, которое используется для идентификации объекта в структуре данных на основе хэшей, такой как хэш-таблица. Метод hashCode() также определен в классе Object и наследуется всеми классами Java.
Важно переопределить методы equals() и hashCode(), если вы хотите использовать свои собственные объекты в качестве ключей в структуре данных на основе хэшей, например в файле HashMap. Если вы переопределяете метод equals(), вы также должны переопределить и метод hashCode(), потому что метод hashCode() используется для определения местоположения объекта в структуре данных на основе хэша. И если два объекта равны, то они должны иметь одинаковый хеш-код.
Вот пример того, как переопределить equals() и hashCode() в классе Java:
publicclassEmployee{privateString name;privateint age;publicEmployee(String name,int age){this.name = name;this.age = age;}@Overridepublicbooleanequals(Object o){if(o ==this)returntrue;if(!(o instanceofEmployee))returnfalse;Employee e =(Employee) o;return e.name.equals(name)&& e.age == age;}@OverridepublicinthashCode(){int result =17;
result =31* result + name.hashCode();
result =31* result + age;return result;}}
В данном примере метод equals() сравнивает имя и возраст двух объектов Employee и возвращает значение true, если они равны. Метод hashCode() возвращает значение хэш-кода для объекта Employee на основе его имени и возраста.
А теперь пример того, как вы можете использовать методы equals() и hashCode() в своем коде:
Employee e1 =newEmployee("John",30);Employee e2 =newEmployee("John",30);// e1 и e2 равны, поэтому будет напечатано "true"System.out.println(e1.equals(e2));// e1 и e2 имеют одинаковый хеш-код, поэтому будет напечатано "true"System.out.println(e1.hashCode()== e2.hashCode());// Создаем HashMap и добавляем e1 и e2 в качестве ключейMap<Employee,String> map =newHashMap<>();
map.put(e1,"Employee 1");
map.put(e2,"Employee 2");// HashMap считает e1 и e2 равными, поэтому будет напечатано "Employee 1"System.out.println(map.get(e2));
В показанном выше примере кода метод equals() используется для сравнения двух объектов Employee — e1 и e2, а метод hashCode() применяется для добавления их в качестве ключей к HashMap. Так как метод equals() считает e1 и e2 считается равными друг другу, он рассматривает их как один и тот же ключ и возвращает значение "Employee 1", когда e2 используется для поиска значения на карте.
+8
Комментарии
популярные
новые
старые
Для того, чтобы оставить комментарий Вы должны авторизоваться