1700477839
1700477840
//指向抽象算法
1700477841
1700477842
private Algorithm al;
1700477843
1700477844
//构造函数传递具体的算法
1700477845
1700477846
public Context(Algorithm_al){
1700477847
1700477848
this.al=_al;
1700477849
1700477850
}
1700477851
1700477852
//执行压缩算法
1700477853
1700477854
public boolean compress(String source,String to){
1700477855
1700477856
return al.compress(source,to);
1700477857
1700477858
}
1700477859
1700477860
//执行解压缩算法
1700477861
1700477862
public boolean uncompress(String source,String to){
1700477863
1700477864
return al.uncompress(source,to);
1700477865
1700477866
}
1700477867
1700477868
}
1700477869
1700477870
也是非常简单,指定一个算法,执行该算法,一个标准的策略模式就编写完毕了。请读者注意,这里虽然有两个算法Zip和Gzip,但是对调用者来说,这两个算法没有本质上的区别,只是“形式”上不同,什么意思呢?从调用者来看,使用哪一个算法都无所谓,两者完全可以互换,甚至用一个算法替代另外一个算法。我们继续看调用者是如何调用的,如代码清单32-5所示。
1700477871
1700477872
代码清单32-5 场景类
1700477873
1700477874
public class Client{
1700477875
1700477876
public static void main(String[]args){
1700477877
1700477878
//定义环境角色
1700477879
1700477880
Context context;
1700477881
1700477882
//对文件执行zip压缩算法
1700477883
1700477884
System.out.println(”========执行算法========”);
1700477885
1700477886
context=new Context(new Zip());
1700477887
1700477888
/*
[
上一页 ]
[ :1.700477839e+09 ]
[
下一页 ]