В настоящее время я занят внедрением Factory Pattern в мой Java-код.
У меня есть эти классы:
CipherStorage
public class CipherStorage {
protected String transformation;
protected String provider;
protected String providerPair;
public CipherStorage(String transformation, String provider, String providerPair){
this.transformation = transformation;
this.provider = provider;
this.providerPair = providerPair;
}
}
CipherStorageProcessor (Интерфейс)
public interface CipherStorageProcessor {
byte[] encryptData(String keyName, String input, @Nullable SharedPreferences pref);
byte[] decryptData(String keyName, byte[] encrypted, @Nullable SharedPreferences pref);
}
CipherStorageRSA
public class CipherStorageRSA extends CipherStorage implements CipherStorageProcessor {
public CipherStorageRSA(String transformation, String provider,String providerPair){
super(transformation, provider, providerPair);
}
}
CipherStorageAES
public class CipherStorageAES extends CipherStorage implements CipherStorageProcessor {
public CipherStorageAES(String transformation, String provider, String providerPair){
super(transformation, provider, providerPair);
}
}
CipherStorageFactory
public class CipherStorageFactory {
public CipherStorage getCipher(String cipherType) {
if (cipherType == null) {
return null;
}
if (cipherType.equalsIgnoreCase("AES")) {
return new CipherStorageAES();
} else if (cipherType.equalsIgnoreCase("RSA")) {
return new CipherStorageRSA();
}
}
}
Имеет ли этот код смысл? Правильно ли добавить параметры на завод? Есть ли лучший способ для этого?
Уже спасибо за любую помощь.
PS: я удалил две интерфейсные функции из классов, чтобы предотвратить много кода.
EDIT:
Когда я создаю экземпляр RSA, например:
CipherStorage RSA = CipherStorageFactory.getCipher("RSA");
У меня нет доступа к методам в интерфейсе?