Бесплатный курс по Java: от основ до продвинутого уровня
Шаблон DAO в Java: работа с БД через объект
Data Access Object. Нужен чтобы отделить низкоуровневый доступ к данным от высокоуровневых сервисов.
Низкоуровневый доступ – это, например, взаимодействие с базой с помощью средств JDBC. Мы можем сокрыть прямое использование средств JDBC (то есть, например, подключение к базе, извлечение данных из базы с помощью каких-то сложных цепочек JDBC методов, или сокрыть некоторые SQL запросы) в DAO объекте и уже в высокоуровневых сервисах (в main, например) взаимодействовать с данными базы через методы DAO объекта.
То есть всё низкоуровневое взаимодействие с БД с помощью JDBC происходит в методах DAO объекта, а высокоуровневые сервисы просто используют эти методы.
Для примера в программе ниже лучше пусть ресурсом будет не база, а List коллекция, так будет проще.
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
//Создадим простейший класс машины.
//Экземпляры класса Car будут храниться
//в List.
class Car {
private String brand;
private int speed;
Car(String brand, int speed){
this.brand = brand;
this.speed = speed;
}
public String getBrand() {
return brand;
}
public void setBrand(String brand) {
this.brand = brand;
}
public int getSpeed() {
return speed;
}
public void setSpeed(int speed) {
this.speed = speed;
}
@Override
public String toString() {
return “Car{” +
“brand=” + brand +
“, speed=” + speed +
‘}’;
}
}
//Создадим интерфейс на основе которого
//будет создаваться DAO класс на основе
//которого будет создаваться DAO объект.
interface DAOInterface {
public List getAllCars();
public Car getCar(int carNum);
public void updateCar(Car car, int carNum);
public void deleteCar(Car car);
}
//Создаем этот DAO класс
//реализуя интерфейс выше.
class DAOImpl implements DAOInterface {
//Вместо сокрытия в DAO классе низкоуровневого
//взаимодействия с БД будем скрывать
//низкоуровневое взаимодействие
//со списком машин listOfCars.
List listOfCars;
public DAOImpl(){
//Пусть при создании DAO объекта
//список инициализируется данными.
listOfCars = new ArrayList(Arrays.asList(
new Car(“Mazda”,200),
new Car(“chevrole”,150)));
}
// В методах ниже скрываем взаимодействие с List
// То есть как можно увидеть ниже все методы
// класса List для низкоуровневого взаимодействия
// с объектом List (например remove(), get())
// сокрыты в методах DAO класса (в методах
// deleteCar(), getCar(), updateCar()) которыми
// будут пользоваться высокоуровневые сервисы.
@Override
public void deleteCar(Car car) {
listOfCars.remove(car.getSpeed());
}
@Override
public List getAllCars() {
return listOfCars;
}
@Override
public Car getCar(int carNum) {
return listOfCars.get(carNum);
}
@Override
public void updateCar(Car car, int carNum) {
Car carfromlist = listOfCars.get(carNum);
carfromlist = car;
}
}
//Воспользуемся уже DAO объектом
//в высокоуровневом сервисе (в мейн).
public class DAOExample {
public static void main(String args[]) {
//Через DAO объект dao будем
//взаимодействовать с ресурсом(списком).
DAOInterface dao = new DAOImpl();
//Как видим все непосредственное
//взаимодействие со списком сокрыто
//в DAO объекте, а в мейн мы
//взаимодействуем со списком посредством
//методов DAO объекта.
Car car = dao.getCar(1);
System.out.println(car);
car.setBrand(“Toyota”);
dao.updateCar(car, 1);
System.out.println(dao.getCar(1));
}
}
Скомпилируем java файл и запустим программу.
Как видим, объект машины в списке был изменен с помощью методов DAO объекта, а не напрямую.
О DAO шаблоне будет еще много говориться в разделе посвященном spring.
Шаблон Front Controller: централизованная обработка запросов
Front Controller в Java: централизованная обработка запросов. Паттерн для маршрутизации HTTP-запросов через единую точку входа в веб-приложениях.
Time to read: 14
Шаблон Template: поведение по умолчанию
Узнайте, как паттерн Template задает скелет алгоритма в Java. Абстрактный класс определяет последовательность шагов, позволяя подклассам переопределять этапы.