Я пишу последовательный интерфейс в Java. Он использует JNA для доступа к базовому API. I'have определен интерфейс SerialPort
, содержащий классические методы (открытие, чтение, запись, закрытие, ...):Как получить классы на платформе Java?
public interface SerialPort {
void open(String portName) throws IOException;
void close() throws IOException;
void write(byte[] data) throws IOException;
byte[] read(int bytes) throws IOException;
byte[] read(int bytes, int timeout) throws IOException;
void setConfig(SerialConfig config) throws Exception;
SerialConfig getConfig();
}
Теперь, я хотел бы иметь реализацию на основе работающей платформы. Каков хороший способ сделать это? Нужно ли загружать классы во время выполнения?
Если я создаю два класса, реализующих этот интерфейс (SerialPortUnix
и SerialPortWin32
). Я хочу иметь функцию, которая вернет ту или иную платформу.
Как я могу это сделать правильно?
Спасибо,
альтернативу шаблону фабрики и время выполнения разрешение реализации будет использовать рамки инъекции зависимостей (например, Spring) с различными профилей/сборок для разных операционных систем, то есть вы будете создавать различные артефакты для разных операционных систем. –
Какое преимущество такого решения? Это кажется сложным. –
он, например, лучше подходит для принципа open-close (https://en.wikipedia.org/wiki/Open/closed_principle), поскольку вам не нужно изменять конструкцию 'if-else' всякий раз, когда вы хотите добавить новую ОС поддержка. –