行为类模式大PK

命令模式VS策略模式

  命令模式和策略模式类图很相似,只是命令模式多了一个接收者(Receiver)角色,通过确切的Command类调用Receiver类,实现了调用者和具体的接收者的解耦。策略模式的意图是封装算法,它认为“算法”已经是一个完整的、不可拆分的原子业务,通过对算法的封装实现算法的独立,并且可以相互转换,让行为的变化独立于拥有行为的客户,如我们在策略模式中的例子:诸葛亮给赵云的锦囊妙计,其中每个计策就是一个算法,对妙计进行封装,在不同的时间调用执行不同的计策;而命令模式是对动作解耦,把一个动作的执行分为执行对象(Receiver)和执行行为(Command),让两者相互独立而不相互影响,我们在命令模式中举出了软件开发的例子,软件开发中包括美工组、界面组、编码组,这就是各个执行对象,还包括一个产品经理,就是那个执行行为,客户通过只跟Command打交道实现各个执行对象的行为。

  接下来我们从对文件压缩的业务需求出发,分别按照命令模式和策略模式设计出一套实现,来看看他们侧重点的不同。文件的压缩其中有两种格式zip和gzip,他们是两种不同的压缩格式,我们将分别实现不同格式的压缩和解压缩功能。

  • 命令模式实现对文件的压缩和解压缩

  命令模式的主旨是封装命令,使请求者和实现者解耦。我们先看看命令模式实现文件压缩和解压缩的类图:

设计模式之行为类模式大PK

  首先介绍一下命令的抽象执行类(IReceiver),该类包括两个方法,对文件的压缩方法和解压缩方法。本类图中是按照压缩格式来设计接口,还可以依照职责设计接口,那么有两个类(CompressReceiver和UncompressReceiver)实现该接口,接口中有两个方法(zipExecute和gZipExecute方法),该类图请读者自己思考,在此没有给出相关设计。如上类图中IReceiver的源码如下:

public interface IReceiver {
    //包含两个方法,压缩和解压缩
    public boolean compress(String source, String to);
    public boolean uncompress(String source, String to);
}
View Code

相关文章:

  • 2021-09-18
  • 2021-05-01
  • 2021-06-27
  • 2021-06-14
猜你喜欢
  • 2022-02-11
  • 2021-06-21
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-07-03
  • 2022-12-23
相关资源
相似解决方案