我是这个术语的新手,所以如果我的问题的任何部分表述错误,请纠正我。
这是我正在考虑的示例:一个文件同步程序,可让您将两个文件夹配对在一起,并指定诸如镜像两个文件夹之类的选项,仅以一种方式复制内容等。
我将如何在运行时指定每个文件夹这些具体实现复制文件(例如,不同类型的加密)。
这是我有点想完成的事情:http: //i.imgur.com/fkVN9.png
我是否必须为每个具体实施?即MirrorAes、MirrorBlowfish、OnewayAes 等?有更好的选择吗?
谢谢
我是这个术语的新手,所以如果我的问题的任何部分表述错误,请纠正我。
这是我正在考虑的示例:一个文件同步程序,可让您将两个文件夹配对在一起,并指定诸如镜像两个文件夹之类的选项,仅以一种方式复制内容等。
我将如何在运行时指定每个文件夹这些具体实现复制文件(例如,不同类型的加密)。
这是我有点想完成的事情:http: //i.imgur.com/fkVN9.png
我是否必须为每个具体实施?即MirrorAes、MirrorBlowfish、OnewayAes 等?有更好的选择吗?
谢谢
您有正交问题 - 同步类型和加密。解决此问题的一种方法是策略模式,其中同步类的具体实现聚合一个加密类,同步器与加密接口交互,允许“混合和匹配”加密和同步,而不会对数量产生乘数效应你写的课。
你的意思是,你需要一个加密策略?
使用抽象工厂和一组加密策略。如果您有多个选项,请使用构建器。
假设您有一个 SHA1Encryption 和一个 DESEncryption。两者都实现了一个接口,例如 GeneralEncryptionStrategy,并且您有一个 EncryptionFactory,它接受一个字符串(“sha1”或“des”)作为参数并创建相应类的实例。
您的图表显示它的方式,您加密的方式似乎取决于您进行同步的方式。我怀疑情况是否如此(尽管我可能错了)。
如果您同步的方式真正独立于您的加密方式,请从继承切换到组合。制作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
,混合和匹配它们,而不会创建组合爆炸:SyncStrategy
EncryptionStrategy
FolderPair p1 = new FolderPair(aUri, bUri, new OneWyaSync(), new AesCrypt());
该设计具有策略模式的两种应用——一种用于同步行为,另一种用于加密。