静的メソッドと単一のプライベートコンストラクターのみを含む一連のAPIクラスがあるため、インスタンス化できません。ただし、サードパーティの開発者がAPIの動作をニーズに合わせて変更できるようにしたいと思います。
これは私がこれまでに持っている解決策です(静的セッター法による依存性注入)。これは、開発者が使用するパブリックAPIクラスです。ご覧のとおり、に依存していStaticApiImpl
ます。
public class StaticApi {
private static StaticApiImpl impl = new StaticApiImpl();
private StaticApi() {}
public static void setImpl(StaticApiImpl impl) {
StaticApi.impl = impl;
}
public static void doThing() {
impl.doThing();
}
}
これは、自分でコーディングしたデフォルトのAPI実装です。
public class StaticApiImpl {
public void doThing() {
System.out.println("Do thing the default way.");
}
}
これは、サードパーティが作成する可能性のあるデフォルトの実装の架空の拡張バージョンです。
public class MyCustomStaticApiImpl extends StaticApiImpl {
@Override
public void doThing() {
System.out.println("Do thing differently.");
}
}
次に、開発者は、プラグインの初期化時に、setterメソッドを介して依存関係を注入するだけです。
public void onLoad() throws Exception {
StaticApi.setImpl(new MyCustomStaticApiImpl());
}
私の質問は:これはそれを行う正しい方法ですか?このようなケースに特化した、聞いたことのないデザインパターンはあるのでしょうか。