//密钥对生成接口
interface IKeyPairGenerable{
KeyPair create();
}
class KeyPair{
}
class DesKeyPairGenerator implements IKeyPairGenerable{
}
class IdeaKeyPairGenerator implements IKeyPairGenerable{
}
class RsaKeyPairGenerator implements IKeyPairGenerable{
}
class KeyPairManager{
private IKeyPairGenerable generator;
private List keyPairList = new Arraylist();
public void setGenerator(IKeyPairGenerable generator){
this.generator = generator;
}
public KeyPair create(){
KeyPair keyPair = null;
if(null != generator){
keyPair = generator.create();
keyPairList.add(keyPair);
}
return keyPair;
}
}
Client:
IKeyPairGenerable desGenerator = new DesKeyPairGenerator();
IKeyPairGenerable rsaGenerator = new RsaKeyPairGenerator();
IKeyPairGenerable ideaGenerator = new IdeaKeyPairGenerator();
KeyPairManager manager = new KeyPairManager();
//使用 DES 算法生成密钥
manager.setGenerator(desGenerator);
KeyPair keyPair = manager.create();
//使用 RSA 算法生成密钥
manager.setGenerator(rsaGenerator);
KeyPair keyPair = manager.create();
可以看出,KeyPairManager 仅仅依赖于接口 IKeyPairGeneratble, 改变密钥对生成算法不改变 KeyPairManager 类。
策略模式一般用来封装算法的不同实现。