Proxy pattern: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
m →Altri progetti: Aggiunto il parametro "Preposizione" nel template "Interprogetto" |
|||
(21 versioni intermedie di 14 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 svolta sui proxy viene trasmessa all'oggetto originale. Una volta che tutte le istanze del proxy sono distrutte, l'oggetto in memoria può essere deallocato.
==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 41 ⟶ 44:
System.out.println("Loading "+filename);
Thread.sleep(5000);
e.printStackTrace();
}
}▼
}
Line 68 ⟶ 71:
Image image1 = new ProxyImage("HiRes_10MB_Photo1");
Image image2 = new ProxyImage("HiRes_10MB_Photo2");
Image image3 = new ProxyImage("
image1.displayImage(); // loading necessary
Line 75 ⟶ 78:
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 105 ⟶ 107:
}
}
public class ProtectionProxy : IClient
{
Line 144 ⟶ 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==
{{interprogetto|preposizione=sul}}
==Collegamenti esterni==
*{{
*{{
{{Design
[[Categoria:
|