Есть два интерфейса:
public interface RobotConnection extends AutoCloseable {
void moveRobotTo(int x, int y);
@Override
void close();
}
и
public interface RobotConnectionManager {
RobotConnection getConnection();
}
Как можно объяснить наличие в интерфейсе RobotConnectionManager
метода getConnection()
, чей возвращаемый тип данных соответствует названию интерфейса RobotConnection
?
Этот одна из возможных реализаций паттерна Фабричный метод. Это не классический вариант реализации, но довольно распространенный.
Класс реализующий интерфейс RobotConnectionManager позволяет создавать классы реализующие интерфейс RobotConnection. Таким образом вы можете полностью переделать процесс создания RobotConnection, не меня интерфейс.
Использоваться это может вот таким образом
RobotConnection.java
// добавлять public не надо
interface RobotConnection extends AutoCloseable {
// описывать close не надо
void moveRobotTo(int x, int y);
}
RobotConnectionManager.java
interface RobotConnectionManager {
RobotConnection getConnection();
}
MoonRobotConnection.java
public class MoonRobotConnection implements RobotConnection {
@Override
public void close() throws Exception {}
@Override
public void moveRobotTo(int x, int y) {}
}
MoonRobotConnectionManager.java
public class MoonRobotConnectionManager implements RobotConnectionManager {
@Override
public RobotConnection getConnection() {
MoonRobotConnection connection = new MoonRobotConnection();
// тут может быть какой-то код
return connection;
}
}
Dispatcher.java
public class Dispatcher {
public void doJob() {
RobotConnectionManager manager = new MoonRobotConnectionManager();
try(RobotConnection connection = manager.getConnection()) {
connection.moveRobotTo(100, 100);
} catch (Exception e) {}
}
}
Вы можете вызвать метод doJob
и передать ему любой объект, класс которого реализует интерфейс RobotConnectionManager
. Ваш код получается "отвязанным" от конкретных классов.
// объект Dispatcher создан ранее и сохранен в переменной dispatcher
dispatcher.doJob(new MoonRobotConnectionManager());
Метод getConnection вернет вам объект класса, который унаследован от RobotConnection. Это будет выглядеть примерно так:
класс, реализующий этот интерфейс:
public class RobotConnectionManagerImpl implements RobotConnectionManager {
...
}
и вызов метода вернет например объект этого класса
RobotConnectionManager rcm = new RobotConnectionManagerImpl();
RobotConnection rc = rcm.getConnection();
Виртуальный выделенный сервер (VDS) становится отличным выбором
Код при запуске потоков-соединений (подсоединении клиентов) выдаёт ошибку "IOExceptionRunnable"Буду признателен любой подсказке
После этого в ListView передается курсор и на нем отображается содержимое курсора, но, если я закрываю курсор в конце, то в приложении выходит...
Я использую сервер tomcat и деплою на него мое grails приложениеУ меня не получилось найти нормальное решение на groovy (все плагины не работают, а разбираться...