Maison > Java > javaDidacticiel > Un modèle de conception de proxy couramment utilisé en Java : exemple de résumé

Un modèle de conception de proxy couramment utilisé en Java : exemple de résumé

php是最好的语言
Libérer: 2018-07-24 17:16:13
original
2053 Les gens l'ont consulté

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();
    }
}
Copier après la connexion

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();
    }
}
Copier après la connexion

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal