Proxy pattern: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
elimino T (nessuna traduzione da oltre 6 mesi) elimino testo nascosto in altra lingua |
m →Altri progetti: Aggiunto il parametro "Preposizione" nel template "Interprogetto" |
||
(30 versioni intermedie di 20 utenti non mostrate) | |||
Riga 1:
In [[informatica]], il '''proxy pattern''' è un [[design pattern]].
Un esempio ben conosciuto di proxy pattern è
Nelle situazioni in cui molte copie di un oggetto complesso devono esistere, il proxy pattern può essere adottato per incorporare il [[Flyweight pattern]] per ridurre l'occupazione di memoria dell'oggetto. Tipicamente viene creata un'istanza di oggetto complesso, e molteplici oggetti proxy, ognuno dei quali contiene un riferimento al singolo oggetto complesso. Ogni operazione
==Diagramma==
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
Loading HiRes_10MB_Photo2
Displaying HiRes_10MB_Photo2
Displaying HiRes_10MB_Photo1
Displaying HiRes_10MB_Photo2
Loading HiRes_10MB_Photo3
Displaying HiRes_10MB_Photo3
La [[
<
import java.util.*;
Line 40 ⟶ 43:
// ...
System.out.println("Loading "+filename);
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
Line 47 ⟶ 56:
class ProxyImage implements Image {
private String filename;
private
public ProxyImage(String filename) { this.filename = filename; }
Line 61 ⟶ 70:
public static void main(String[] args) {
Image image1 = new ProxyImage("HiRes_10MB_Photo1");
Image image2 = new ProxyImage("HiRes_10MB_Photo2");
Image image3 = new ProxyImage("HiRes_10MB_Photo3");
image1.displayImage(); // loading necessary
image2.displayImage(); // loading necessary
image1.displayImage(); // no loading necessary; already done
image2.displayImage(); // no loading necessary; already done
image3.displayImage(); // loading necessary
}
}
</syntaxhighlight>
===Protection proxy
In questo esempio scritto in [[
In questo esempio '''thePassword''' è la password corretta
<
using System;
Line 97 ⟶ 107:
}
}
public class ProtectionProxy : IClient
{
Line 136 ⟶ 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">
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 ==
* [[Design pattern]]
==Altri progetti==
==Collegamenti esterni==▼
{{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 pattern}}
[[Categoria:Pattern]]▼
|