Il pattern Proxy viene utilizzato quando si vuol rappresenta la funzionalità di una classe tramite un’altra. Questo tipo di design pattern rientra tra quelli Strutturali.
Nella fattispecie, un oggetto contiene l’oggetto originale e ne interfaccia le funzionalità con il mondo esterno.
DIAGRAMMA UML PROXY
IMPLEMENTAZIONE
Creiamo l’interfaccia Immagine e le relative classi concrete che la implementano. ImmagineProxy è una classe utilizzata per ridurre la memoria da caricamento di oggetti ImmagineReale. La classe Main utilizzerà la classe Proxy per caricare un oggetto ed utilizzarlo.
Step 1: Creiamo l’interfaccia Immagine
public interface Immagine {
void mostra();
}
Step 2: Creiamo le classi concrete che la implementano
ImmagineReale.java
public class ImmagineReale implements Immagine {
private String nomeFile;
public ImmagineReale(String nomeFile){
this.nomeFile = nomeFile;
caricaImmagine(nomeFile);
}
@Override
public void mostra() {
System.out.println("[IMMAGINEREALE]: mostra(): " + nomeFile);
}
private void caricaImmagine(String nomeFile){
System.out.println("[IMMAGINEREALE]: caricaImmagine(): " + nomeFile);
}
}
ImmagineProxy.java
public class ImmagineProxy implements Immagine{
private ImmagineReale immagineReale;
private String nomeFile;
public ImmagineProxy(String nomeFile){
this.nomeFile = nomeFile;
}
@Override
public void mostra() {
System.out.println("[IMMAGINEPROXY]: mostra()::start");
if(immagineReale == null){
System.out.println("[IMMAGINEPROXY]: mostra()::immagine null");
immagineReale = new ImmagineReale(nomeFile);
}
immagineReale.mostra();
System.out.println("[IMMAGINEPROXY]: mostra()::end");
}
}
Step 3: Utilizziamo la classe del pattern tramite il Main
public class Main {
public static void main(String[] args) {
Immagine immagine = new ImmagineProxy("IMG_001.jpg");
immagine.mostra();
System.out.println("");
immagine.mostra();
}
}
Step 4: Output
[IMMAGINEPROXY]: mostra()::start
[IMMAGINEPROXY]: mostra()::immagine null
[IMMAGINEREALE]: caricaImmagine(): IMG_001.jpg
[IMMAGINEREALE]: mostra(): IMG_001.jpg
[IMMAGINEPROXY]: mostra()::end
[IMMAGINEPROXY]: mostra()::start
[IMMAGINEREALE]: mostra(): IMG_001.jpg
[IMMAGINEPROXY]: mostra()::end
0 Comments