Open Source Your Knowledge, Become a Contributor
Technology knowledge has to be shared and made accessible for free. Join the movement.
Diagramme
Voici le diagramme des classes que nous allons implémenter. Nous allons simuler un système de fichiers.
Le FileSystem ici va jouer le rôle du Client, le fichier MyFile joue ici le rôle d'invoker, les ConcreteCommandes CloseFileCommande WriteFileCommand et OpenFileCommand vont éxécuter les méthodes nécessaires du Receiver FileSystem.
Les Receiver
On crée nos objets Receiver :
- L'interface FileSystem :
public interface FileSystemReceiver {
void openFile();
void writeFile();
void closeFile();
}
- Un objet UnixFileSystemReceiver qui implémentera l'interface FileSystem :
public class UnixFileSystemReceiver implements FileSystemReceiver {
public void openFile() {
System.out.println("Opening file in unix OS");
}
public void writeFile() {
System.out.println("Writing file in unix OS");
}
public void closeFile() {
System.out.println("Closing file in unix OS");
}
}
- Un objet WindowsFileSystemReceiver qui implémentera l'interface FileSystem :
public class WindowsFileSystemReceiver implements FileSystemReceiver {
public void openFile() {
System.out.println("Opening file in Windows OS");
}
public void writeFile() {
System.out.println("Writing file in Windows OS");
}
public void closeFile() {
System.out.println("Closing file in Windows OS");
}
}
L'interface Command
On crée l'interface Commande qui sera implémentée pour chaque nouvelle commande
public interface Command {
void execute();
}
Les ConcreteCommand de notre FileSystem
Commande permettant d'ouvrir un fichier :
public class OpenFileCommand implements Command {
private FileSystemReceiver fileSystem;
public OpenFileCommand(FileSystemReceiver fs){
this.fileSystem=fs;
}
public void execute() {
//open command is forwarding request to openFile method
this.fileSystem.openFile();
}
}
Commande permettant de fermer un fichier :
public class CloseFileCommand implements Command {
private FileSystemReceiver fileSystem;
public CloseFileCommand(FileSystemReceiver fs){
this.fileSystem=fs;
}
public void execute() {
this.fileSystem.closeFile();
}
}
Commande permettant d'écrire dans un fichier :
public class WriteFileCommand implements Command {
private FileSystemReceiver fileSystem;
public WriteFileCommand(FileSystemReceiver fs){
this.fileSystem=fs;
}
public void execute() {
this.fileSystem.writeFile();
}
}
Création de l'Invoker
Création du FileInvoker (MyFile sur le diagramme):
public class FileInvoker {
public Command command;
public FileInvoker(Command c){
this.command=c;
}
public void execute(){
this.command.execute();
}
}
L'encapsulation ici est respectée, on ignore de quoi les Command sont faites.
Nous allons créer un FileSystemReceiverUtil pour fournir un FileSystemReceiver approprié
public class FileSystemReceiverUtil {
public static FileSystemReceiver getUnderlyingFileSystem(){
String osName = System.getProperty("os.name");
System.out.println("Underlying OS is:"+osName);
if(osName.contains("Windows")){
return new WindowsFileSystemReceiver();
}else{
return new UnixFileSystemReceiver();
}
}
}