我对术语不熟悉,如果我的问题的任何部分都错了,请纠正我。
以下是我想到的例子:
一个文件同步程序,允许您将2个文件夹组合在一起,并指定选项,如镜像两个文件夹,仅单向复制内容等。
我如何在运行时指定每个具体实现如何复制文件(例如,不同类型的加密)。
以下是我有点想要完成的事情: http://i.imgur.com/fkVN9.png
我是否必须为每个实施具体实施?即MirrorAes,MirrorBlowfish,OnewayAes等?还有更好的选择吗?
由于
答案 0 :(得分:0)
您有正交问题 - 同步类型和加密。解决这个问题的一种方法是策略模式,其中您的同步类的具体实现聚合加密类,同步器与加密接口交互,允许“混合和匹配”加密和同步,而不会对数量产生乘数效应。你写的课程。
答案 1 :(得分:0)
您的意思是,您需要加密策略吗?
使用抽象工厂和一组加密策略。如果您有多个选项,请使用构建器。
假设您有SHA1加密和DES加密。两者都实现了一个接口,比如GeneralEncryptionStrategy,你有一个EncryptionFactory,它接受一个字符串(“sha1”或“des”)作为参数,并创建一个相应类的实例。
答案 2 :(得分:0)
图表显示的方式,加密方式似乎取决于您进行同步的方式。我怀疑是这种情况(虽然我可能错了)。
如果您同步的方式与加密方式完全无关,请从继承切换到合成。将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());
此设计包含Strategy Pattern的两个应用程序 - 一个用于同步行为,另一个用于加密。