Heim >Java >javaLernprogramm >Was sind die Entwurfsmuster für anonyme innere Klassen in Java?

Was sind die Entwurfsmuster für anonyme innere Klassen in Java?

WBOY
WBOYOriginal
2024-05-02 16:42:011133Durchsuche

Anonyme innere Klassen sind spezielle innere Klassen in Java, die keinen expliziten Namen haben und durch den neuen Ausdruck erstellt werden. Sie werden hauptsächlich zur Implementierung bestimmter Schnittstellen oder zur Erweiterung abstrakter Klassen verwendet und unmittelbar nach der Erstellung verwendet. Zu den gängigen Entwurfsmustern für anonyme innere Klassen gehören: Adaptermuster: Konvertiert eine Schnittstelle in eine andere Schnittstelle. Strategiemuster: Algorithmen definieren und ersetzen. Beobachtermuster: Beobachter registrieren und Ereignisse verarbeiten. Dies ist in praktischen Anwendungen sehr nützlich, z. B. beim Sortieren eines TreeSet nach Zeichenfolgenlänge, beim Erstellen anonymer Threads usw.

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

Java Anonymous Inner Class Design Pattern

Anonyme innere Klasse ist eine spezielle Art von innerer Klasse in Java. Sie hat keinen expliziten Namen, sondern wird direkt mit einem neuen Ausdruck erstellt. Es wird hauptsächlich zum Implementieren einer bestimmten Schnittstelle oder zum Erweitern einer bestimmten abstrakten Klasse verwendet und normalerweise im Methodenkörper erstellt und sofort verwendet.

Hauptentwurfsmuster

Die folgenden sind gängige Entwurfsmuster, die anonyme innere Klassen verwenden:

1. Adaptermuster

Das Adaptermuster verwendet anonyme innere Klassen, um eine Schnittstelle in eine andere Schnittstelle umzuwandeln. Der folgende Code erstellt beispielsweise eine anonyme innere Klasse und passt die Klasse Adaptee an die Schnittstelle Target an: 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. Strategiemuster

Strategiemuster verwendet anonym innere Klassen, um eine Familie von Algorithmen zu definieren und deren austauschbare Verwendung zu ermöglichen. Der folgende Code erstellt beispielsweise eine anonyme innere Klasse, die die Schnittstelle Comparator implementiert, um die Längen zweier Zeichenfolgen zu vergleichen:

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

3 Beobachtermuster

Das Beobachtermuster verwendet anonyme innere Klassen Registriert Beobachtungen und verarbeitet vom Thema ausgegebene Ereignisse. Der folgende Code erstellt beispielsweise eine anonyme innere Klasse, die die Observer-Schnittstelle implementiert, um Subject-Objekte zu beobachten:

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

Praktischer Fall

🎜Beispiel: Erstellen Sie ein TreeSet mit Comparator 🎜🎜 🎜TreeSet erfordert, dass seine Elemente vergleichbar sind. Der folgende Code verwendet eine anonyme innere Klasse, um einen benutzerdefinierten Komparator zu definieren, der Zeichenfolgen nach ihrer Länge sortiert: 🎜rrreee🎜🎜 Beispiel: Erstellen Sie einen anonymen Thread 🎜🎜🎜Der folgende Code verwendet eine anonyme innere Klasse, um einen Thread zu erstellen und zu starten, in dem es gibt eine Nachricht aus: 🎜rrreee

Das obige ist der detaillierte Inhalt vonWas sind die Entwurfsmuster für anonyme innere Klassen in Java?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn