1

我是这个术语的新手,所以如果我的问题的任何部分表述错误,请纠正我。

这是我正在考虑的示例:一个文件同步程序,可让您将两个文件夹配对在一起,并指定诸如镜像两个文件夹之类的选项,仅以一种方式复制内容等。
我将如何在运行时指定每个文件夹这些具体实现复制文件(例如,不同类型的加密)。

这是我有点想完成的事情:http: //i.imgur.com/fkVN9.png

我是否必须为每个具体实施?即MirrorAes、MirrorBlowfish、OnewayAes 等?有更好的选择吗?

谢谢

4

3 回答 3

0

您有正交问题 - 同步类型和加密。解决此问题的一种方法是策略模式,其中同步类的具体实现聚合一个加密类,同步器与加密接口交互,允许“混合和匹配”加密和同步,而不会对数量产生乘数效应你写的课。

于 2012-07-23T21:50:05.567 回答
0

你的意思是,你需要一个加密策略?

使用抽象工厂和一组加密策略。如果您有多个选项,请使用构建器。

假设您有一个 SHA1Encryption 和一个 DESEncryption。两者都实现了一个接口,例如 GeneralEncryptionStrategy,并且您有一个 EncryptionFactory,它接受一个字符串(“sha1”或“des”)作为参数并创建相应类的实例。

于 2012-07-23T21:51:20.937 回答
0

您的图表显示它的方式,您加密的方式似乎取决于您进行同步的方式。我怀疑情况是否如此(尽管我可能错了)。

如果您同步的方式真正独立于您的加密方式,请从继承切换到组合。制作FolderPair一个具有 aSyncStrategy和 an的对象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);
}

现在您可以使用 and 的实例配置您的对象FolderPair,混合和匹配它们,而不会创建组合爆炸:SyncStrategyEncryptionStrategy

FolderPair p1 = new FolderPair(aUri, bUri, new OneWyaSync(), new AesCrypt());

该设计具有策略模式的两种应用——一种用于同步行为,另一种用于加密。

于 2012-07-23T22:00:38.200 回答