Introduction : Le mode proxy fournit un objet proxy pour un objet, et l'objet proxy contrôle la référence et l'accès à l'objet d'origine. Vous pouvez gérer des situations telles qu'avant l'accès à l'objet, après l'accès, les exceptions, etc. Elle peut être comprise comme un moyen de valorisation de classe (héritage, décoration, procuration).
Un, fonction
Fonction d'isolation intermédiaire :Dans certains cas, une classe client ne veut pas ou ne peut pas référencer directement un objet délégué, et l'objet classe proxy peut jouer un rôle intermédiaire entre la classe client et l'objet délégué ses caractéristiques. C'est la classe proxy et la classe déléguée qui implémentent la même interface.
Principe d'ouverture et de fermeture, fonctions ajoutées : Agent En plus d'être un intermédiaire entre la classe client et la classe délégué, nous pouvons également étendre les fonctions de la classe délégué en ajoutant des fonctions supplémentaires à la classe agent. De cette façon, il suffit de modifier la classe agent sans modifier la classe agent. Classe de délégué, ce qui est cohérent avec la conception du code. Le principe d'ouverture et de fermeture. La classe proxy est principalement responsable du prétraitement des messages pour la classe déléguée, du filtrage des messages, du transfert des messages vers la classe déléguée et du traitement ultérieur des résultats renvoyés. La classe proxy elle-même n'implémente pas réellement le service, mais fournit des services spécifiques en appelant les méthodes pertinentes de la classe déléguée. Les véritables fonctions métiers sont toujours implémentées par des classes déléguées, mais certains services publics peuvent être ajoutés avant et après l'exécution des fonctions métiers. Par exemple, si nous souhaitons ajouter des fonctions de mise en cache et de journalisation au projet, nous pouvons utiliser la classe proxy pour le terminer sans ouvrir la classe déléguée encapsulée.
2. La classification du mode proxy
Le proxy statique est Le code source est créé par un programme ou généré automatiquement par un outil spécifique, puis compilé. Avant l'exécution du programme, le fichier .class de la classe proxy a été créé.
Le proxy dynamique est créé dynamiquement via un mécanisme de réflexion lorsque le programme est en cours d'exécution.
3. Implémentation du code
Procuration statique
// 第一步,创建服务类接口 public interface BuyHouse { void buyHosue(); } /** * 第二步,实现服务接口 */ public class BuyHouseImpl implements BuyHouse { @Override public void buyHosue() { System.out.println("我要买房"); } } /** * 第三步,创建代理类 */ public class BuyHouseProxy implements BuyHouse { private BuyHouse buyHouse; public BuyHouseProxy(final BuyHouse buyHouse) { this.buyHouse = buyHouse; } @Override public void buyHosue() { System.out.println("买房前准备"); buyHouse.buyHosue(); System.out.println("买房后装修"); } } /** * 第四步,编写实现类 */ public class ProxyTest { public static void main(String[] args) { BuyHouse buyHouse = new BuyHouseImpl(); buyHouse.buyHosue(); BuyHouseProxy buyHouseProxy = new BuyHouseProxy(buyHouse); buyHouseProxy.buyHosue(); } }
Proxy dynamique
Dans le proxy dynamique, nous n'avons plus besoin de créer manuellement des classes proxy, il nous suffit d'écrire un processeur dynamique. Le véritable objet proxy est créé dynamiquement pour nous par le JDK au moment de l'exécution.
/** * 第一步:编写动态处理器 */ public class DynamicProxyHandler implements InvocationHandler { private Object object; public DynamicProxyHandler(final Object object) { this.object = object; } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println("买房前准备"); Object result = method.invoke(proxy, args); System.out.println("买房后装修"); return result; } } /** * 第二步:编写测试类 */ public class DynamicProxyTest { public static void main(String[] args) { BuyHouse buyHouse = new BuyHouseImpl(); BuyHouse proxyBuyHouse = (BuyHouse) Proxy.newProxyInstance(BuyHouse.class.getClassLoader(), new Class[]{BuyHouse.class}, new DynamicProxyHandler(buyHouse)); proxyBuyHouse.buyHosue(); } }
Recommandations associées :
Explication détaillée des modèles de conception Java courants - Modèle d'usine
Modèle de proxy des modèles de conception Java ( Modèle de proxy) Introduction
Tutoriel vidéo : modèles de conception
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!