1. Proxy-Muster
Das Proxy-Muster dient dazu, einen Proxy für andere Objekte bereitzustellen, um den Zugriff auf dieses Objekt zu steuern. Tatsächlich führt der Proxy-Modus ein gewisses Maß an Indirektion beim Zugriff auf Objekte ein. Diese Indirektion kann mit verschiedenen Zwecken verbunden sein.
Ihre Besonderheit besteht darin, dass die Proxy-Klasse und die Delegate-Klasse dieselbe Schnittstelle haben. Die Proxy-Klasse ist hauptsächlich für die Vorverarbeitung von Nachrichten für die Delegate-Klasse, das Filtern von Nachrichten, das Weiterleiten von Nachrichten an die Delegate-Klasse und die anschließende Verarbeitung von Nachrichten verantwortlich. Normalerweise besteht eine Assoziation zwischen einer Proxy-Klasse und einer Delegate-Klasse. Das Objekt der Proxy-Klasse selbst implementiert den Dienst nicht, sondern durch den Aufruf der entsprechenden Methoden des Objekts der Delegate-Klasse bestimmte Dienste bereitstellen.
2. Klassifizierung
Agentenklassen können je nach Erstellungszeitraum in zwei Typen unterteilt werden: statische Proxy-Klassen und dynamische Proxy-Klassen.
Statische Proxy-Klasse: Von Programmierern erstellt oder automatisch von bestimmten Tools generiert und dann kompiliert. Bevor das Programm ausgeführt wird, ist die .class-Datei der Proxy-Klasse bereits vorhanden.
Dynamische Proxy-Klasse: Wird dynamisch mithilfe des Reflexionsmechanismus erstellt, wenn das Programm ausgeführt wird.
3. Beispiele für statischen Proxy und dynamischen Proxy. Statischer Proxy: :
package com.bjpowernode.pattern; public interface UserManager { public void addUser(String userId, String userName); public void delUser(String userId); public void modifyUser(String userId, String userName); public String findUser(String userId); }Dynamischer Proxy:Geschäftsschnittstellenklasse:
package com.bjpowernode.pattern; public class UserManagerImpl implements UserManager { public void addUser(String userId, String userName) { //System.out.println("start-->>addUser() userId-->>" + userId); try { System.out.println("UserManagerImpl.addUser() userId-->>" + userId); //System.out.println("success-->>addUser()"); }catch(Exception e) { e.printStackTrace(); //System.out.println("error-->>addUser()"); throw new RuntimeException(); } } public void delUser(String userId) { System.out.println("UserManagerImpl.delUser() userId-->>" + userId); } public String findUser(String userId) { System.out.println("UserManagerImpl.findUser() userId-->>" + userId); return "张三"; } public void modifyUser(String userId, String userName) { System.out.println("UserManagerImpl.modifyUser() userId-->>" + userId); } }Geschäftsschnittstellen-Implementierungsklasse:
package com.bjpowernode.pattern; public class UserManagerImplProxy implements UserManager { private UserManager userManager; public UserManagerImplProxy(UserManager userManager) { this.userManager = userManager; } public void addUser(String userId, String userName) { try { System.out.println("start-->>addUser() userId-->>" + userId); userManager.addUser(userId, userName); System.out.println("success-->>addUser()"); }catch(Exception e) { e.printStackTrace(); System.out.println("error-->>addUser()"); } } public void delUser(String userId) { } public String findUser(String userId) { return null; } public void modifyUser(String userId, String userName) { } }BusinessHandler-Klasse:
package com.bjpowernode.pattern; public class Client { /** * @param args */ public static void main(String[] args) { //UserManager userManager = new UserManagerImpl(); UserManager userManager = new UserManagerImplProxy(new UserManagerImpl()); userManager.addUser("0001", "张三"); } }Client-Klasse:
start-->>addUser() userId-->>0001 UserManagerImpl.addUser() userId-->>0001 success-->>addUser()Laufergebnis:
package com.bjpowernode.pattern; public interface UserManager { public String test(String userId); }
Das obige ist der detaillierte Inhalt vonBeispielanalyse eines dynamischen Proxys im Java-Reflexionsmechanismus. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!