命令模式和策略模式的原理都相同,命令模式是对行为的封装,而策略模式是对算法的封装。两者都是要把相同的关注点和对他们的调用分离开,如命令模式是将行为和对它们的调用分离开,而策略模式是将算法和对它们的调用分离开。这里我们只以命令模式来说明问题。
If(condition1)
{
//condition1下的行为
doThing1();
}
else if(condition2)
{
//condition2下的行为
doThing2();
}
else if(condition3)
{
//condition3下的行为
doThing3();
}
……
命令模式可以方便的对上面的代码进行优化:
public interface Common
{
public void doThing();
}
public class Common1 implements Common
{
public void doThing()
{
//condition1下的行为
doThing1();
}
}
public class Common2 implements Common
{
public void doThing()
{
//condition2下的行为
doThing2();
}
}
public class Common13implements Common
{
public void doThing()
{
//condition3下的行为
doThing3();
}
}
客户端:
Common common;
If(condition1) common = new Common1();
else if(condition2) common = new Common2();
else if(condition3) common = new Common3();
common.doThing();
命令模式通过将行为从调用者那里分离出来,达到了下面几个目的:第一,分离关注,对各个行为进行单独的关注,减少错误的出现。不管是对行为类还是它的调用者,都变得简单。第二,行为类通过对接口的实现,使得它们的调用者可以对它们进行动态绑定,增加了程序的灵活性和扩展性。