Javaデザインパターン-アイデアの要約

抽象クラス

抽象クラスは、サブクラスの構築パラメーターを取得します

このアイデアは、ApplicationEventから来ています。

Springイベントをカスタマイズするときは、次のように定義します。

package com.example.tmp;

import org.springframework.context.ApplicationEvent;

public class MyEvent extends ApplicationEvent {
    public MyEvent(Object source) {
        super(source);
    }
}

このパラメーター化されたコンストラクターを追加しない場合、エラーが報告されます。

ソースコード

public abstract class ApplicationEvent extends EventObject {
	private static final long serialVersionUID = 7099057708183571937L;

	private final long timestamp;

	public ApplicationEvent(Object source) {
		super(source);
		this.timestamp = System.currentTimeMillis();
	}

	public final long getTimestamp() {
		return this.timestamp;
	}

}
public class EventObject implements java.io.Serializable {
    private static final long serialVersionUID = 5516075349620653480L;

    protected transient Object  source;

    public EventObject(Object source) {
        if (source == null)
            throw new IllegalArgumentException("null source");

        this.source = source;
    }

    public Object getSource() {
        return source;
    }

    public String toString() {
        return getClass().getName() + "[source=" + source + "]";
    }
}

ApplicationEventクラスの関係

 

総括する

Springは最後にEventObjectを使用して、抽象サブクラス(この場合はApplicationEvent)を持つイベントデータ(ソースフィールド)を格納し、コンストラクターで抽象サブクラスをスーパーペアレントにします。パラメーターはイベントデータです。

一方では、ApplicationEventを継承する通常のクラスはパラメーター化されたコンストラクターを提供する必要があり、super()を使用して抽象クラスApplicationEventのコンストラクターを呼び出す必要があります(抽象クラ​​ス自体は直接インスタンス化できないため、サブクラス)

一方、ApplicationEvent抽象クラスにはコンストラクターにスーパー親クラスがあり、パラメーターはイベントデータであるため、EventObjectをイベントデータに格納できます。

 EventObjectは、多くのサブクラス(すべての抽象クラス)を持つ基本クラスであり、ApplicationEventはサブクラスの1つです。EventObjectはイベントデータを保存し、サブクラスにはいくつかの拡張機能があります。サブクラスはApplicationEventに似ており、パラメーターコンストラクターがあり、その中でEventObjectコンストラクターをスーパー呼び出しします。

インターフェース

複数の実装クラスが同じインターフェースを実装します

interface ITop
 
interface IA extends ITop
class AImpl implements IA
 
interface IB extends ITop
class BImpl extends AImpl implements IB

おすすめ

転載: blog.csdn.net/feiying0canglang/article/details/115025337