Proxy pattern: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Botcrux (discussione | contributi)
m Bot: fix citazione web (v. discussione)
m Altri progetti: Aggiunto il parametro "Preposizione" nel template "Interprogetto"
 
(11 versioni intermedie di 9 utenti non mostrate)
Riga 13:
===Virtual proxy (in Java)===
 
Il seguente esempio [[Java (linguaggio di programmazione)|Java]] illustra il pattern "virtual proxy". L'output del programma è:
Loading HiRes_10MB_Photo1
Displaying HiRes_10MB_Photo1
Riga 25:
La [[Classe (informatica)|classe]] <code>ProxyImage</code> è utilizzata per ritardare l'operazione (onerosa) di caricamento di un [[file]] dal disco finché il risultato di questa operazione non è effettivamente necessario. Se il file non è mai necessario, il caricamento risulta essere completamente eliminato.
 
<sourcesyntaxhighlight lang="java">
import java.util.*;
Riga 44:
System.out.println("Loading "+filename);
 
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
 
Riga 78:
image2.displayImage(); // no loading necessary; already done
image3.displayImage(); // loading necessary
 
}
}
</syntaxhighlight>
</source>
 
===Protection proxy (in C#)===
 
In questo esempio scritto in [[Linguaggio C Sharp|C#]], nella classe <code>RealClient</code> è memorizzato un numero di conto. Soltanto gli utenti che conoscono una [[password]] valida possono accedere a questo conto. Il <code>RealClient</code> è protetto dal <code>ProtectionProxy</code> che conosce la password. Prima di far leggere il numero di conto all'utente, il proxy richiede che questi si autentichi; Solo se la password introdotta è corretta il proxy invoca il <code>RealClient</code> per restituire il numero di conto all'utente.
Line 89 ⟶ 88:
In questo esempio '''thePassword''' è la password corretta
 
<sourcesyntaxhighlight lang="csharp">
using System;
 
Line 108 ⟶ 107:
}
}
 
public class ProtectionProxy : IClient
{
Line 147 ⟶ 145:
}
}
</syntaxhighlight>Segue lo stesso esempio implementato in [[Java (linguaggio di programmazione)|Java]], in questo caso le implementazioni dell'interfaccia <code>Client</code> sono <code>RealClientImpl</code> e <code>ProtectionProxyClientImpl</code> .<syntaxhighlight lang="java">
</source>
package fundamentalPatterns.protectionProxyPattern;
 
import java.util.Scanner;
 
public interface Client {
String getAccountNo();
}
public class RealClientImpl implements Client {
private String accountNo = "12345";
public RealClientImpl() {
System.out.println("RealClient: Initialized");
}
@Override
public String getAccountNo() {
System.out.println("RealClient's AccountNo: " + accountNo);
return accountNo;
}
}
 
public class ProtectionProxyClientImpl implements Client {
private String password; //password to get secret
private Client client;
private Scanner scanner = new Scanner(System.in);
 
public ProtectionProxyClientImpl(String pwd) {
System.out.println("ProtectionProxy: Initialized");
password = pwd;
client = new RealClientImpl();
}
 
/**
* Authenticate the user and return the Account Number
*/
@Override
public String getAccountNo() {
System.out.print("Password: ");
String tmpPwd = scanner.nextLine();
 
if (password == null || password.equals(tmpPwd)) {
return client.getAccountNo();
} else {
System.out.println("ProtectionProxy: Illegal password!");
return "";
}
}
}
public class ProtectionProxyExample {
public static void main(String[] args) {
Client client = new ProtectionProxyClientImpl("thePassword");
System.out.println();
System.out.println("main received: " + client.getAccountNo());
}
}
</syntaxhighlight>
 
== Voci correlate ==
Line 153 ⟶ 207:
 
==Altri progetti==
{{interprogetto|preposizione=sul}}
 
==Collegamenti esterni==
*{{cita web|1=http://wiki.java.net/bin/view/Javapedia/ProxyPattern|2=Proxy pattern in Java|lingua=en|accesso=11 giugno 2008|urlarchivio=https://web.archive.org/web/20100428080722/http://wiki.java.net/bin/view/Javapedia/ProxyPattern|dataarchivio=28 aprile 2010|urlmorto=sì}}
*{{cita web|1=http://www.lepus.org.uk/ref/companion/Proxy.xml|2=Proxy pattern in UML e in LePUS3 (un linguaggio di modellazione formale)|lingua=en|accesso=11 giugno 2008|urlarchivio=https://web.archive.org/web/20111003001610/http://www.lepus.org.uk/ref/companion/Proxy.xml|dataarchivio=3 ottobre 2011|urlmorto=sì}}
 
{{Design Patterns Patternspattern}}
 
[[Categoria:PatternDesign pattern]]