2016-04-11 9 views
0

良い設計ですか、間違っていますか? Daoクラスはパッケージ外ではアクセスされません。パッケージアクセス修飾子内でのみ作成されます。すべてのアクセスはインターフェイスを介してのみです。パッケージの外部からのパブリックアクセスは、工場でインスタンスを作成する場合にのみ発生します。

の作成と呼び出し
public interface IDao { 

    void perform(); 

} 


//package access 
class Dao implements IDao{ 

    private Dao(){} 

    @Override 
    void perform(){...} 

    Dao getInstance(){ 
     ... 
     return new Dao(); 
    } 

} 

//in the same package as Dao 
public class DaoFactory{ 

    private DaoFactory(){} 

    public static IDao createDao(){ 
     return Dao.getInstance(); 
    } 
} 

IDao dao = DaoFactory.createDao(); 
dao.perform(); 
+0

これが良いデザインであるかどうかは、問題を解決しようとしているかどうかによって大きく左右されます。あなたはここで何をしようとしているのかについていくつかの文脈を提供できますか? – azurefrog

+0

私は外部接続へのインターフェイスを提供しようとしているし、私は上記のようにカプセル化したい。 – viavad

答えて

0

私は私が正しくあなたを理解願っています。

つまり、クラス(実装)の代わりにインターフェイスを使用すると、クライアントコードが簡単に変更できる実装に依存しないため、常に良好です。クライアントコードが同じパッケージにあるかどうかにかかわらずそれはゆるいカップリングです。それはSOLIDのDです。

関連する問題