匿名内部类是 java 中没有显式名称、通过 new 表达式创建的特殊内部类,主要用于实现特定接口或扩展抽象类,并在创建后立即使用。常见的匿名内部类设计模式包括:适配器模式:将一个接口转换为另一个接口。策略模式:定义和替换算法。观察者模式:注册观察者并处理事件。它在实际应用中非常有用,例如按字符串长度排序treeset、创建匿名线程等。
Java 匿名内部类的设计模式
匿名内部类是 Java 中一种特殊类型的内部类,它没有明确的名称,而是使用一个 new 表达式 直接创建。它主要用于实现特定接口或扩展特定抽象类,并且通常在方法体内创建并立即使用。
主要设计模式
以下是使用匿名内部类的常见设计模式:
1. 适配器模式
适配器模式使用匿名内部类将一个接口转换成另一个接口。例如,以下代码创建一个匿名内部类,将 Adaptee
类适配为 Target
接口:
Target target = new Target() { @Override public void request() { adaptee.specificRequest(); } };
2. 策略模式
策略模式使用匿名内部类来定义算法族,并使其可以互换使用。例如,以下代码创建一个匿名内部类,实现 Comparator
接口比较两个字符串的长度:
Comparator comparator = 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 要求其元素可以比较。以下代码使用匿名内部类定义自定义比较器,根据字符串长度对字符串进行排序:
Set treeSet = 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();
以上就是Java 匿名内部类的设计模式有哪些?的详细内容,更多请关注每日运维网(www.mryunwei.com)其它相关文章!