>  기사  >  Java  >  Java의 익명 내부 클래스에 대한 디자인 패턴은 무엇입니까?

Java의 익명 내부 클래스에 대한 디자인 패턴은 무엇입니까?

WBOY
WBOY원래의
2024-05-02 16:42:011056검색

익명 내부 클래스는 명시적인 이름이 없고 새로운 표현식을 통해 생성되는 Java의 특수 내부 클래스로, 주로 특정 인터페이스를 구현하거나 추상 클래스를 확장하는 데 사용되며 생성 후 즉시 사용됩니다. 일반적인 익명 내부 클래스 디자인 패턴은 다음과 같습니다. 어댑터 패턴: 하나의 인터페이스를 다른 인터페이스로 변환합니다. 전략 패턴: 알고리즘 정의 및 교체. 관찰자 패턴: 관찰자를 등록하고 이벤트를 처리합니다. 문자열 길이로 TreeSet 정렬, 익명 스레드 생성 등과 같은 실제 응용 프로그램에 매우 유용합니다.

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

Java 익명 내부 클래스 디자인 패턴

익명 내부 클래스는 Java의 특수한 유형의 내부 클래스이며, 새 표현식을 사용하여 직접 생성됩니다. 주로 특정 인터페이스를 구현하거나 특정 추상 클래스를 확장하는 데 사용되며, 대개 메서드 본문 내에서 생성되어 즉시 사용됩니다.

주요 디자인 패턴

다음은 익명 내부 클래스를 사용하는 일반적인 디자인 패턴입니다.

1. 어댑터 패턴

어댑터 패턴은 익명 내부 클래스를 사용하여 하나의 인터페이스를 다른 인터페이스로 변환합니다. 예를 들어 다음 코드는 익명 내부 클래스를 생성하고 Adaptee 클래스를 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. 전략 패턴

전략 패턴은 익명을 사용합니다. 내부 클래스를 사용하여 알고리즘 계열을 정의하고 이를 상호 교환적으로 사용할 수 있습니다. 예를 들어, 다음 코드는 두 문자열의 길이를 비교하기 위해 Comparator 인터페이스를 구현하는 익명 내부 클래스를 만듭니다.

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

3. 관찰자 패턴

관찰자 패턴은 익명 내부 클래스를 사용하여 관찰을 등록하고 주제에서 발생하는 이벤트를 처리합니다. 예를 들어, 다음 코드는 Subject 객체를 관찰하기 위해 Observer 인터페이스를 구현하는 익명 내부 클래스를 생성합니다.

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

실제 사례

🎜예: Comparator를 사용하여 TreeSet 생성 🎜🎜 🎜TreeSet의 요소는 비교할 수 있어야 합니다. 다음 코드는 익명 내부 클래스를 사용하여 길이에 따라 문자열을 정렬하는 사용자 정의 비교기를 정의합니다. 🎜rrreee🎜🎜 예: 익명 스레드 만들기 🎜🎜🎜다음 코드는 익명 내부 클래스를 사용하여 다음과 같은 스레드를 만들고 시작합니다. 메시지를 인쇄합니다: 🎜rrreee

위 내용은 Java의 익명 내부 클래스에 대한 디자인 패턴은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.