私は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
Urクエリが混乱しています。もう少し説明が必要です –
「Authenticable」のさまざまな実装を可能にしたいですか? 'setAuthenticable(Authenticable a)'をクラスで使用したり、 'HardcodedAuthenticator'のサブクラスがデフォルト実装をオーバーライドできるようにすることができます。この種の動作を達成するための戦略またはファクトリメソッド/抽象ファクトリ。 –
"私のHardcodedAuthenticatorでは、Authenticable(Atleastは私が一番良いと思うもの)の実装に限定されたくないが、Authenticable ..のインスタンスを返すことができるようにしたい。" –