1700477894
*
1700477895
1700477896
*/
1700477897
1700477898
//执行压缩算法
1700477899
1700477900
context.compress(“c:\windows”,“d:\windows.zip”);
1700477901
1700477902
//执行解压缩算法
1700477903
1700477904
context.uncompress(“c:\windows.zip”,“d:\windows”);
1700477905
1700477906
}
1700477907
1700477908
}
1700477909
1700477910
运行结果如下所示:
1700477911
1700477912
========执行算法========
1700477913
1700477914
c:\windows—>d:\windows.zip ZIP压缩成功!
1700477915
1700477916
c:\windows.zip—>d:\windows ZIP解压缩成功!
1700477917
1700477918
要使用gzip算法吗?在客户端(Client)上把注释删掉就可以了,其他的模块根本不受任何影响,策略模式关心的是算法是否可以相互替换。策略模式虽然简单,但是在项目组使用得非常多,可以说随手拈来就是一个策略模式。
1700477919
1700477920
1700477921
1700477922
1700477923
设计模式之禅 32.1.2 命令模式实现压缩算法
1700477924
1700477925
命令模式的主旨是封装命令,使请求者与实现者解耦。例如,到饭店点菜,客人(请求者)通过服务员(调用者)向厨师(接收者)发送了订单(行为的请求),该例子就是通过封装命令来使请求者和接收者解耦。我们继续来看压缩和解压缩的例子,怎么使用命令模式来完成该需求呢?我们先画出类图,如图32-2所示。
1700477926
1700477927
1700477928
1700477929
1700477930
图32-2 命令模式实现压缩算法的类图
1700477931
1700477932
类图看着复杂,但是还是一个典型的命令模式,通过定义具体命令完成文件的压缩、解压缩任务,注意我们这里对文件的每一个操作都是封装好的命令,对于给定的请求,命令不同,处理的结果当然也不同,这就是命令模式要强调的。我们先来看抽象命令,如代码清单32-6所示。
1700477933
1700477934
代码清单32-6 抽象压缩命令
1700477935
1700477936
public abstract class AbstractCmd{
1700477937
1700477938
//对接收者的引用
1700477939
1700477940
protected IReceiver zip=new ZipReceiver();
1700477941
1700477942
protected IReceiver gzip=new GzipReceiver();
1700477943
[
上一页 ]
[ :1.700477894e+09 ]
[
下一页 ]