1

私は用語に慣れていないので、質問の一部が間違っている場合は修正してください。

私が考えている例は次のとおりです。2 つのフォルダーをペアにして、2 つのフォルダーをミラーリングする、内容を一方向にのみコピーするなどのオプションを指定できるファイル同期プログラムです
。これらの具体的な実装は、ファイルをコピーします (たとえば、さまざまな種類の暗号化)。

これが私が達成したいことです: http://i.imgur.com/fkVN9.png

それぞれについて具体的な実装を行う必要がありますか? つまり、MirrorAes、MirrorBlowfish、OnewayAes などですか? より良い代替手段はありますか?

ありがとう

4

3 に答える 3

0

図が示している方法、暗号化の方法は、同期の方法に依存しているように見えます。これが事実であるとは思えません(間違っているかもしれませんが)。

同期の方法が暗号化の方法と完全に独立している場合は、継承から構成に切り替えます。次のように、とFolderPairを持つオブジェクトを作成します。SyncStrategyEncryptionStrategy

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 つは暗号化用です。

于 2012-07-23T22:00:38.200 に答える
0

直交する懸念事項があります-同期タイプと暗号化。これにアプローチする 1 つの方法は、同期クラスの具体的な実装が暗号化クラスを集約し、シンクロナイザーが暗号化インターフェイスと対話する戦略パターンです。あなたが書くクラス。

于 2012-07-23T21:50:05.567 に答える
0

つまり、暗号化戦略が必要ですか?

一連の暗号化戦略とともに抽象ファクトリを使用します。複数のオプションがある場合は、ビルダーを使用してください。

たとえば、SHA1Encryption と DESEncryption があるとします。どちらも GeneralEncryptionStrategy などのインターフェイスを実装しており、引数として文字列 (「sha1」または「des」) を取り、対応するクラスのインスタンスを作成する EncryptionFactory があります。

于 2012-07-23T21:51:20.937 に答える