Maison  >  Article  >  Java  >  Quels sont les modèles de conception des classes internes anonymes en Java ?

Quels sont les modèles de conception des classes internes anonymes en Java ?

WBOY
WBOYoriginal
2024-05-02 16:42:011094parcourir

Les classes internes anonymes sont des classes internes spéciales en Java qui n'ont pas de nom explicite et sont créées via la nouvelle expression. Elles sont principalement utilisées pour implémenter des interfaces spécifiques ou étendre des classes abstraites et sont utilisées immédiatement après la création. Les modèles de conception de classe interne anonymes courants incluent : Modèle d’adaptateur : convertit une interface en une autre interface. Modèle de stratégie : définition et algorithmes de remplacement. Modèle d'observateur : enregistrez les observateurs et gérez les événements. C'est très utile dans des applications pratiques, telles que le tri d'un TreeSet par longueur de chaîne, la création de threads anonymes, etc.

Java 匿名内部类的设计模式有哪些?

Modèle de conception de classe interne anonyme Java

Classe interne anonyme est un type spécial de classe interne en Java qui n'a pas de nom explicite mais est créé directement à l'aide d'une nouvelle expression. Il est principalement utilisé pour implémenter une interface spécifique ou étendre une classe abstraite spécifique, et est généralement créé dans le corps de la méthode et utilisé immédiatement.

Principaux modèles de conception

Voici les modèles de conception courants utilisant des classes internes anonymes :

1. Modèle d'adaptateur

Le modèle d'adaptateur utilise des classes internes anonymes pour convertir une interface en une autre interface. Par exemple, le code suivant crée une classe interne anonyme et adapte la classe Adaptee à l'interface Target : Adaptee 类适配为 Target 接口:

Target target = new Target() {
    @Override
    public void request() {
        adaptee.specificRequest();
    }
};

2. 策略模式

策略模式使用匿名内部类来定义算法族,并使其可以互换使用。例如,以下代码创建一个匿名内部类,实现 Comparator 接口比较两个字符串的长度:

Comparator<String> comparator = new Comparator<String>() {
    @Override
    public int compare(String s1, String s2) {
        return s1.length() - s2.length();
    }
};

3. 观察者模式

观察者模式使用匿名内部类来注册观察者并处理主题发出的事件。例如,以下代码创建一个匿名内部类,实现 Observer 接口以观察 Subject

Subject subject = new Subject();
Observer observer = new Observer() {
    @Override
    public void update(Subject subject) {
        // 处理主题更新
    }
};
subject.addObserver(observer);

2 Le modèle de stratégie

Le modèle de stratégie utilise l'anonymat. classes internes pour définir une famille d’algorithmes et permettre de les utiliser de manière interchangeable. Par exemple, le code suivant crée une classe interne anonyme qui implémente l'interface Comparator pour comparer les longueurs de deux chaînes :

Set<String> treeSet = new TreeSet<>(new Comparator<String>() {
    @Override
    public int compare(String s1, String s2) {
        return s1.length() - s2.length();
    }
});

3. Modèle d'observateur

Le modèle d'observateur utilise des classes internes anonymes pour. enregistrer les observations et gérer les événements émis par le sujet. Par exemple, le code suivant crée une classe interne anonyme qui implémente l'interface Observer pour observer les objets Subject :

new Thread() {
    @Override
    public void run() {
        System.out.println("Hello from thread!");
    }
}.start();

Cas pratique

🎜Exemple : Créer un TreeSet avec Comparator 🎜🎜 🎜TreeSet exige que ses éléments soient comparables. Le code suivant utilise une classe interne anonyme pour définir un comparateur personnalisé qui trie les chaînes en fonction de leur longueur : 🎜rrreee🎜🎜 Exemple : Créer un fil de discussion anonyme 🎜🎜🎜Le code suivant utilise une classe interne anonyme pour créer et démarrer un fil de discussion dans lequel il imprime un message : 🎜rrreee

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!

Déclaration:
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