Latest web development tutorials

modalità Proxy

In modalità proxy (proxy pattern), una classe di funzioni per conto di un'altra classe. Questo tipo di modelli di progettazione appartengono al modello strutturale.

In modalità proxy, creiamo un oggetto con un oggetto esistente per fornire una interfaccia funzionale al mondo esterno.

introduzione

Intento: fornire un agente per controllare l'accesso a questo oggetto ad altri oggetti.

Risoluzione principale: accesso diretto all'oggetto ha causato problemi, come ad esempio: l'oggetto che si desidera accedere sulla macchina remota.Nei sistemi orientati agli oggetti, alcuni oggetti per qualche motivo (come ad esempio la creazione di oggetti è costoso, o alcune azioni richiedono controlli di sicurezza, o di accesso al di fuori del processo), darà agli utenti l'accesso diretto alla configurazione del sistema o un sacco di problemi, siamo in grado di aggiungere un livello per accedere a questo oggetto, al momento dell'accesso a questo oggetto.

Quando utilizzare: quando si vuole fare qualcosa per controllare l'accesso a una classe.

Come risolvere: aggiungere strato intermedio.

Il codice chiave: collegamento con le combinazioni di classe proxy.

Esempi di applicazione: 1, collegamenti di Windows al suo interno.2, il maiale è andato a elevata Cuilan cambiamento risultato delle scimmie, può essere compreso: l'elevato aspetto Cuilan astratta, alta turchese io e Monkey implementa questa interfaccia, Maiale accesso ad alta Cuilan quando non vede il Re Scimmia, in modo che il Re Scimmia è un alto Cuilan classe proxy. 3, non necessariamente per comprare biglietti del treno alla stazione di acquistare, si può anche andare alle prese. 4, un assegno o un certificato di banca di deposito è un proxy fondi conto. Controllare le operazioni sul mercato viene utilizzato al posto del denaro contante, e fornisce un controllo conto capitale dell'emittente. 5, primavera AOP.

Vantaggi: 1, responsabilità chiare.2, ad alta scalabilità. 3, intelligente.

Svantaggi: 1, come tra il client e il tema vero che l'oggetto proxy, in modo da un certo tipo di modalità proxy possono causare più lenta velocità di elaborazione richiesta.2, per ottenere modalità proxy richiede un lavoro supplementare per raggiungere alcuni modalità proxy è molto complessa.

scenari di utilizzo: secondo a dividere le responsabilità, di solito hanno i seguenti scenari di utilizzo: 1, Remote Agent.2. Le segnalazioni. 3, copy-on-write agenti. 4, la protezione (Protect o Access) agente. 5, Cache Agent. 6, firewall (Firewall) agente. 7, la sincronizzazione (sincronizzazione) agente. 8, riferimenti intelligenti (Smart Riferimento) agente.

Nota: La differenza tra 1 e adattatori modalità: modello adattatore grandi cambiamenti contemplavano l'interfaccia di oggetto, e la modalità di delega non possono essere modificate da agenti dell'interfaccia di classe.La differenza tra i 2 e decoratore modelli: Decorator per migliorare la funzionalità e modalità proxy deve essere controllata.

realizzazione

Creeremo un'interfacciaImmaginee implementazione dell'interfacciaimmagineclassi di entità.ProxyImageè una classe proxy, riducendo ingombro di memoriaRealImageoggetti caricati.

ProxyPatternDemo,dimostriamo l'uso di classeProxyImageper ottenereunoggettoimmagineda caricare e visualizzati su richiesta.

modello Proxy diagramma UML

fase 1

Creare un'interfaccia.

Image.java

interfaccia pubblica Immagine {
   void display ();
}

fase 2

Creare classe di entità che implementa l'interfaccia.

RealImage.java

implementa public class RealImage Immagine {

   String filename privato;

   RealImage pubblico (string filename) {
      this.fileName = filename;
      loadFromDisk (fileName);
   }

   @Override
   Display public void () {
      System.out.println ( "Visualizzazione" e nome del file);
   }

   vuoto loadFromDisk privato (string filename) {
      System.out.println ( "Loading" + fileName);
   }
}

ProxyImage.java

implementa public class ProxyImage Immagine {

   privato RealImage realImage;
   String filename privato;

   ProxyImage pubblico (string filename) {
      this.fileName = filename;
   }

   @Override
   Display public void () {
      if (realImage == null) {
         realImage = new RealImage (fileName);
      }
      realImage.display ();
   }
}

fase 3

Quando richiesto, utilizzareProxyImageottenere l'oggetto di classeRealImage.

ProxyPatternDemo.java

public class ProxyPatternDemo {
	
   Main (string [] args) {public static void
      immagine immagine = new ProxyImage ( "test_10mb.jpg");

      // Carica l'immagine da image.display disco (); 
      System.out.println ( "");
      // Le immagini non possono essere caricati da image.display disco (); 	
   }
}

fase 4

Verifica uscita.

Caricamento test_10mb.jpg
Visualizzazione test_10mb.jpg

Visualizzazione test_10mb.jpg