プロが教えるわが家の防犯対策術!

javaのクラスの分け方について質問です。
APIの内部用と外部用でクラスを分けたいのですがインターフェースとしては一つにまとめようと思ってます。
それでimplementsする際に内部と外部で分けようと考えてますが、この分け方は一般的にはアリなのでしょうか。

インターフェースとして
public interface Service {
外部で使うAPI
Response test1(String prm );
内部で使うAPI
Response test2(String prm );


外部用クラス
public class Gaibu implements Service
Overrideしてtest1を実装

内部用クラス
public class Naibu implements Service
Overrideしてtest2を実装

質問者からの補足コメント

  • そもそも一つのクラスに記述しないと実装していないクラスってエラーになってしまいますね。

    インターフェースを分けるで良いのでしょうか?

      補足日時:2022/04/26 16:34

A 回答 (2件)

> ファクトリーの構造がいまいちわからなくて


GoF デザインパターンでいうファクトリの説明は、少々難解です。
ここでは「外部の人が内部構造を知らずに使える」だけを目的にするので、単純に以下のような形で如何でしょうか。

public class APIのファクトリ {
_ public static 外部型 create() {
_ _ return new APIの実装クラス();
_ }
}

// 内部向けメソッドも見えてしまうので NG
APIの実装クラス api = new APIの実装クラス();

// 外部向けメソッドしか(たぶん)見えないので OK
外部型 api = APIのファクトリ.create();
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2022/05/06 11:28

インターフェースに不要部分があるならば、そもそも設計が間違っています。

用途ごとにインターフェースを用意しましょう。

interface 外部型 { ... }
interface 内部型 { ... }

実装は別でも一つでも良いです

class 外部向け implements 外部型 {}
class 内部向け implements 内部型 {}
class 内外共通 implements 外部型, 内部型 {}

インターフェース型でインスタンス生成するファクトリも用意しましょう。

class ファクトリ { static 外部型 create() { return new 内外共通(); } }
    • good
    • 0
この回答へのお礼

ありがとうございます。
ファクトリーの構造がいまいちわからなくて。
参考になるurlとかないでしょうか

お礼日時:2022/04/26 21:41

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!