首页 > 文章列表 > Java 匿名内部类的设计模式有哪些?

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

java 匿名内部类
383 2024-05-07

匿名内部类是 Java 中没有显式名称、通过 new 表达式创建的特殊内部类,主要用于实现特定接口或扩展抽象类,并在创建后立即使用。常见的匿名内部类设计模式包括:适配器模式:将一个接口转换为另一个接口。策略模式:定义和替换算法。观察者模式:注册观察者并处理事件。它在实际应用中非常有用,例如按字符串长度排序TreeSet、创建匿名线程等。

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

Java 匿名内部类的设计模式

匿名内部类是 Java 中一种特殊类型的内部类,它没有明确的名称,而是使用一个 new 表达式 直接创建。它主要用于实现特定接口或扩展特定抽象类,并且通常在方法体内创建并立即使用。

主要设计模式

以下是使用匿名内部类的常见设计模式:

1. 适配器模式

适配器模式使用匿名内部类将一个接口转换成另一个接口。例如,以下代码创建一个匿名内部类,将 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);

实战案例

示例:创建带有 Comparator 的 TreeSet

TreeSet 要求其元素可以比较。以下代码使用匿名内部类定义自定义比较器,根据字符串长度对字符串进行排序:

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

示例:创建匿名线程

以下代码使用匿名内部类创建并启动一个线程,在其中打印一条消息:

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