Я просматриваю некоторые классы DAO, где они подвергают статическим методам CRUD create(), delete() и т. Д. И т.д. в программу и где каждый класс DAO реализует шаблон Observer, проверяя для изменений в базе данных через класс Notification.java, и если одно уведомление об изменении получено, потянув объект из базы данных.Шаблон наблюдателя и классы DAO с статическими методами CRUD
Упрощенный код похож на это:
OfficeDAO.java
public class OfficeDAO implements PropertyChangeListener
{
public OfficeDAO()
{
/*
* Below we add ourselves to the observers of class Notifications
* (see observer pattern in Java) in practice we are notified
* when one of our objects is changed by a remote client user
*/
Notification.addChangeListener(this);
}
public static void create(Office office)
{
Connection connection = DBConnection.getConnection();
//... stuff with the database insertion
Notification.notifyDatabaseChanges("ocreate-" + officeId);
}
}
Теперь проблема заключается в том, что addChangeListener (это); находится в конструкторе, но поскольку этот класс DAO используется через его статические методы, конструктор никогда не вызывается.
Чтобы исправить это в главном() метод применения (внутри нити EDT, кстати) есть вызов, как:
new OfficeDAO(); //ignore this, it is needed only to start the DAO constructor
Это казалось вполне Hacky, поэтому я думал, добавив
static {
Notification.addChangeListener(this);
}
в классе OfficeDAO.java, но, разумеется, эта «эта» ссылка отсутствует в статическом инициализаторе, поэтому у меня нет решений. Извлечение статичности из методов DAO исключено из-за того, что эти методы вызывается по всему приложению и вызывается без экземпляра класса.
Есть ли какое-либо чистое решение или обходное решение, которое я в настоящее время отсутствует?
Имеет ли PropertyChangeListener только статические методы, которые переопределены в каждом DAO? Можете ли вы показать код для PropertyChangeListener и класса Notification? Кроме того, в классическом шаблоне Observer это Observable уведомляет наблюдателей об изменении своего состояния. – CKing