Hallo. Ich möchte gerne einen einfachen Dateimanager in java programmieren. Dieser soll relativ modular aufgebaut sein, also zB mehrere "Dateisysteme" unterstützen (also mit normalen Files arbeiten, oder auch auf einem FTP-Server) sowie Kopierlisten anbieten (Beim Kopieren wird also alles in eine Kopierliste eingefügt, und später die gesamte Kopierliste in den zielordner kopiert. Die kopierliste soll dazwischen auch bearbeitbar sein).
Ich habe mir bereits einige Gedanken über den Aufbau gemacht.
Es soll erstmals eine abstrakte "lightweight" Basisklasse für Files geben. In dieser gibt es einige Methoden und Objekte die für Dateien und Ordner gleich sind, also der Pfad (eine eigene Klasse die einen Pfad repräsentiert), das zu verwendende Filesystem (wie oben erwähnt sollen ja verschiedene unterstützt werden) sowie das zu verwendende Kopierlistenprinzip und ein paar Methoden. Von dieser Basisklasse werden die beiden Klassen Datei und Ordner abgeleitet, die dann jeweils spezielle Methoden wie copy enthalten (bei ordnern wird der ordner inklusive unterordner und dateien kopiert, bei einer datei nur die datei usw).
Diese 3 Objekte, also Kopierliste, Filesystem und Filepfad sind Interfaces, die dann jeweils implementiert werden (so kann es zb eine Kopierliste mit Fifo-Prinzip und eine mit Filo-Prinzip, etc. geben, oder ein Pfadsystem nach Unix- oder Windows prinzip).
Dies wäre vorerst mal meine Idee eins Grundaufbaues. Falls man sich darunter nichts vorstellen kann, hier nochmal das ganze als Pseudocode
Wie man hier nun recht gut sieht, sollte dies ermöglichen während der Laufzeit zB auf eine Lifo-Kopierliste umzustellen, indem zB einfach BaseFile.copyList = new LifoCopyList(); aufgerufen wird.
Nun würde ich gerne wissen, was ihr so von diesem Design hält, was noch zu verbesern wäre oder was total schlecht ist.
Ich habe mir bereits einige Gedanken über den Aufbau gemacht.
Es soll erstmals eine abstrakte "lightweight" Basisklasse für Files geben. In dieser gibt es einige Methoden und Objekte die für Dateien und Ordner gleich sind, also der Pfad (eine eigene Klasse die einen Pfad repräsentiert), das zu verwendende Filesystem (wie oben erwähnt sollen ja verschiedene unterstützt werden) sowie das zu verwendende Kopierlistenprinzip und ein paar Methoden. Von dieser Basisklasse werden die beiden Klassen Datei und Ordner abgeleitet, die dann jeweils spezielle Methoden wie copy enthalten (bei ordnern wird der ordner inklusive unterordner und dateien kopiert, bei einer datei nur die datei usw).
Diese 3 Objekte, also Kopierliste, Filesystem und Filepfad sind Interfaces, die dann jeweils implementiert werden (so kann es zb eine Kopierliste mit Fifo-Prinzip und eine mit Filo-Prinzip, etc. geben, oder ein Pfadsystem nach Unix- oder Windows prinzip).
Dies wäre vorerst mal meine Idee eins Grundaufbaues. Falls man sich darunter nichts vorstellen kann, hier nochmal das ganze als Pseudocode
Code:
interface CopyList {
...
}
class FifoCopyList implements CopyList {
...
}
interface FileSystem {
...
}
class NormalFileSystem implements FileSystem {
...
}
interface FilePath {
...
}
class UnixFilePath implements FilePath {
...
}
abstract class BaseFile {
protected static CopyList copyList;
protected static FileSystem fileSystem;
protected static FilePath filePath;
...
}
...
}
class NormalFile extends BaseFile{
...
}
class Directory extends BaseFile{
...
}
Wie man hier nun recht gut sieht, sollte dies ermöglichen während der Laufzeit zB auf eine Lifo-Kopierliste umzustellen, indem zB einfach BaseFile.copyList = new LifoCopyList(); aufgerufen wird.
Nun würde ich gerne wissen, was ihr so von diesem Design hält, was noch zu verbesern wäre oder was total schlecht ist.