Как я могу расширить функциональность apache FTPFile? - PullRequest
0 голосов
/ 30 января 2019

Я изучаю ООП на Java и столкнулся с проблемой.Мне нужно создать пользовательский объект Folder, который сохраняет функциональность объекта FTPFile, и добавить к нему еще немного.

FTPClient client = new FTPClient();
FTPFile[] folders = client.listFiles();

Мне нужно преобразовать все объекты в массиве folders изFTPFile в Folder объектах, и я подумал об установке состояния суперкласса внутри конструктора подкласса:

public Folder(FTPFile ftpF) {
    super.setName(ftpF.getName());
    super.setLink(ftpF.getLink());
    super.setHardLinkCount(ftpF.getHardLinkCount());
    super.setGroup(ftpF.getGroup());
    super.setSize(ftpF.getSize());
    super.setTimestamp(ftpF.getTimestamp());
    super.setType(ftpF.getType());
    super.setUser(ftpF.getUser());
}

Но я не знаю, является ли это хорошей практикой.Должен ли я пойти с этим или я должен хранить объект FTPFile в состоянии объекта Folder и вызывать его функциональные возможности всякий раз, когда он мне нужен?

1 Ответ

0 голосов
/ 30 января 2019

Делегирование

или я должен хранить объект FTPFile в состоянии объекта Folder и вызывать его функциональные возможности всякий раз, когда мне это нужно?

Вы столкнулись с идеей делегирование .Это очень гибкий способ расширения функциональности класса без его наследования.

Пример

class Folder {
    private FTPFile ftpFile;

    public FTPFile(FTPFile ftpFile) {
        this.ftpFile = ftpFile;
    }

    // more code..
}

Представим, что вы хотите расширить метод setName(string) из FTPFile и всеимя должно быть в верхнем регистре:

public void setName(String name) {
    String uppercaseName = name.toUppercase();

    // delegate the task with the uppercase name
    ftpFile.setName(uppercaseName);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...