2016-11-05 9 views
-1

私は2,3日間これを動作させようとしてきましたが、正しい方向に少し押してください。私のインタフェースAの実装では、インタフェースB型のインスタンスを返したいと思っています。

問題:私は私のWebアプリケーションでは、単純なログインシステムを構築しようとしている

。私はクラス間の疎結合があるようにしています。 私は2つのインターフェースを構築しました。

public interface Authenticable { 
    String getUsername(); 
    boolean changePassword(char[] password); 
} 

このインターフェイスは、認証できるクラスによって実装されます。


public interface Authenticator { 
    Authenticable authenticate(String username, char[] password) throws AuthenticationException; 
} 

そして、このインタフェースは、認証可能に認証できるクラスによって実装されます。


は現在、私は、データベースか何かを持っていないが、私は私が最初に簡単な認証を構築し、後でデータベースまたは使用することがあります別の1(のためにそれを交換することができることができるようにしたいことを決めましたファイルシステム)。

だから私が作った最初の実装をしたユーザ名は「test」と等しい場合

public class HardcodedAuthenticator implements Authenticator { 
    @Override 
    public Authenticable authenticate(String username, char[] password) throws AuthenticationException { 
     if (username == "test" && password == new char[]{'t', 'e', 's', 't'}) { 

     } 
    } 
} 

この実装は、単純にチェックし、パスワードが「test」と等しいです。

もしそうなら:Authenticableのインスタンスを返します。
そうでない場合:AuthenticationExceptionをスローします。


は、しかし、私のHardcodedAuthenticatorに私が認証可能の実装に限定されることはしたくない(Atleastのそれは私が最善だと思うものです)が、私はまだ認証可能のインスタンスを返すことができるようにしたいです。..

質問:

はどのようにインターフェースAの実装Yは、インタフェースBのインスタンスを返すのですか?

ありがとうございます。
クリスチャンAdkin

+0

Urクエリが混乱しています。もう少し説明が必要です –

+0

「Authenticable」のさまざまな実装を可能にしたいですか? 'setAuthenticable(Authenticable a)'をクラスで使用したり、 'HardcodedAuthenticator'のサブクラスがデフォルト実装をオーバーライドできるようにすることができます。この種の動作を達成するための戦略またはファクトリメソッド/抽象ファクトリ。 –

+0

"私のHardcodedAuthenticatorでは、Authenticable(Atleastは私が一番良いと思うもの)の実装に限定されたくないが、Authenticable ..のインスタンスを返すことができるようにしたい。" –

答えて

-1

私が正しくあなたの問題を理解している場合は、認証の実装は、あなたがあなたの認証

 public interface Authenticator { 
        Authenticable authenticate(String username, char[] password,Authenticable authenticable) throws AuthenticationException; 
     } 

しようとするタイプ認証可能の参照を注入する必要がある認証可能のいずれかの特定の実装に依存性を持たせたくありません依存性注入に関するいくつかの研究をするために、あなたがまだそれを混乱させるなら、多くの有益な記事を見つけるでしょう。

+0

これはまさに私の質問で意味したものです。これは私の問題を解決する素晴らしい方法のように見え、私は依存性注入の研究をしています。 –

関連する問題