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

Java 匿名内部类的设计模式
匿名内部类是 Java 中一种特殊类型的内部类,它没有明确的名称,而是使用一个 new 表达式 直接创建。它主要用于实现特定接口或扩展特定抽象类,并且通常在方法体内创建并立即使用。
主要设计模式
以下是使用匿名内部类的常见设计模式:
1. 适配器模式
立即学习“Java免费学习笔记(深入)”;
适配器模式使用匿名内部类将一个接口转换成另一个接口。例如,以下代码创建一个匿名内部类,将 Adaptee 类适配为 Target 接口:
Target target = new Target() {
@Override
public void request() {
adaptee.specificRequest();
}
};2. 策略模式
策略模式使用匿名内部类来定义算法族,并使其可以互换使用。例如,以下代码创建一个匿名内部类,实现 Comparator 接口比较两个字符串的长度:
使用模板与程序分离的方式构建,依靠专门设计的数据库操作类实现数据库存取,具有专有错误处理模块,通过 Email 实时报告数据库错误,除具有满足购物需要的全部功能外,成新商城购物系统还对购物系统体系做了丰富的扩展,全新设计的搜索功能,自定义成新商城购物系统代码功能代码已经全面优化,杜绝SQL注入漏洞前台测试用户名:admin密码:admin888后台管理员名:admin密码:admin888
Comparatorcomparator = new Comparator () { @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 要求其元素可以比较。以下代码使用匿名内部类定义自定义比较器,根据字符串长度对字符串进行排序:
SettreeSet = new TreeSet<>(new Comparator () { @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();










