Het proxy-patroon in Java

1. Overzicht

Met het proxy-patroon kunnen we een tussenpersoon creëren die fungeert als een interface naar een andere bron, terwijl ook de onderliggende complexiteit van de component wordt verborgen.

2. Voorbeeld van proxypatroon

Overweeg een zwaar Java-object (zoals een JDBC-verbinding of een SessionFactory) waarvoor enige initiële configuratie vereist is.

We willen dat dergelijke objecten alleen op aanvraag worden geïnitialiseerd en als ze dat eenmaal zijn, willen we ze hergebruiken voor alle oproepen:

Laten we nu een eenvoudige interface en de configuratie voor dit object maken:

openbare interface ExpensiveObject {void process (); }

En de implementatie van deze interface met een grote initiële configuratie:

openbare klasse ExpensiveObjectImpl implementeert ExpensiveObject {openbaar ExpensiveObjectImpl () {heavyInitialConfiguration (); } @Override public void process () {LOG.info ("verwerking voltooid."); } private void heavyInitialConfiguration () {LOG.info ("Initiële configuratie laden ..."); }}

We zullen nu het proxy-patroon gebruiken en ons object op aanvraag initialiseren:

openbare klasse ExpensiveObjectProxy implementeert ExpensiveObject {privé statisch ExpensiveObject-object; @Override public void process () {if (object == null) {object = new ExpensiveObjectImpl (); } object.process (); }}

Telkens wanneer onze klant het werkwijze() methode, ze krijgen alleen de verwerking te zien en de initiële configuratie blijft altijd verborgen:

public static void main (String [] args) {ExpensiveObject object = new ExpensiveObjectProxy (); object.process (); object.process (); }

Merk op dat we de werkwijze() methode tweemaal. Achter de schermen zal het instellingengedeelte slechts één keer voorkomen - wanneer het object voor het eerst wordt geïnitialiseerd.

Voor elke volgende oproep slaat dit patroon de initiële configuratie over en vindt alleen verwerking plaats:

Initiële configuratie laden ... verwerking voltooid. verwerking voltooid.

3. Wanneer moet u proxy gebruiken?

Begrijpen hoe een patroon gebruiken is belangrijk.

Begrijpen wanneer om het te gebruiken is van cruciaal belang.

Laten we het hebben over wanneer u het proxy-patroon moet gebruiken:

  • Als we een vereenvoudigde versie van een complex of zwaar object willen. In dit geval kunnen we het weergeven met een skeletobject dat het originele object op verzoek laadt, ook wel lazy initialization genoemd. Dit staat bekend als de virtuele proxy
  • Als het originele object aanwezig is in een andere adresruimte, en we het lokaal willen representeren. We kunnen een proxy maken die al het nodige standaardwerk doet, zoals het maken en onderhouden van de verbinding, codering, decodering, enz., Terwijl de client er toegang toe heeft zoals deze aanwezig was in hun lokale adresruimte. Dit wordt de externe proxy genoemd
  • Wanneer we een beveiligingslaag willen toevoegen aan het oorspronkelijke onderliggende object om gecontroleerde toegang te bieden op basis van toegangsrechten van de klant. Dit wordt beschermingsproxy genoemd

4. Conclusie

In dit artikel hebben we het proxy-ontwerppatroon bekeken. Dit is een goede keuze in de volgende gevallen:

  • Wanneer we een vereenvoudigde versie van een object willen hebben of het object veiliger willen benaderen
  • Als we een lokale versie van een object op afstand willen

De volledige broncode voor dit voorbeeld is beschikbaar op GitHub.