図が示している方法、暗号化の方法は、同期の方法に依存しているように見えます。これが事実であるとは思えません(間違っているかもしれませんが)。
同期の方法が暗号化の方法と完全に独立している場合は、継承から構成に切り替えます。次のように、とFolderPair
を持つオブジェクトを作成します。SyncStrategy
EncryptionStrategy
class FolderPair {
URI a, b;
private final SyncStrategy syncStrategy;
private final EncryptionStrategy cryptStrategy;
public FolderPair(
URI a
, URI b
, SyncStrategy syncStrategy
, EncryptionStrategy cryptStrategy) {
...
}
public void sync() {
syncStrategy.synchronize(a, b, cryptStrategy);
}
}
interface SyncStrategy {
void synchronize(URI a, URI b, EncryptionStrategy cryptStrategy);
}
interface EncryptionStrategy {
byte[] encrypt(byte[] data);
}
FolderPair
と のインスタンスを使用してオブジェクトを構成し、組み合わせ爆発を作成せずにそれらを混合および一致させることができるようにSyncStrategy
なりました。EncryptionStrategy
FolderPair p1 = new FolderPair(aUri, bUri, new OneWyaSync(), new AesCrypt());
この設計は、ストラテジー パターンの 2 つのアプリケーションを特徴としています。1つは同期動作用で、もう 1 つは暗号化用です。