策略模式和命令模式之间的区别
2022-08-31 10:25:51
通常,命令模式用于从需要执行的操作中生成对象 - 获取操作及其参数并将其包装在要记录的对象中,保留撤消,发送到远程站点等。随着时间的推移,往往会有大量不同的 Command 对象通过系统中的给定点,并且 Command 对象将包含描述所请求操作的不同参数。
另一方面,策略模式用于指定应该如何执行某些操作,并插入到更大的对象或方法中以提供特定的算法。排序策略可能是合并排序,可能是插入排序,或者可能是更复杂的排序,例如仅在列表大于某个最小大小时才使用合并排序。策略对象很少受到命令对象那样的大规模洗牌,而是经常用于配置或调整目的。
这两种模式都涉及将代码和包含它们的原始类中各个操作的可能参数分解到另一个对象中,以提供独立的可变性。区别在于实践中遇到的用例以及每种模式背后的意图。
已经给出了单词。这是具体代码的差异。
public class ConcreteStrategy implements BaseStrategy {
@Override
public void execute(Object argument) {
// Work with passed-in argument.
}
}
public class ConcreteCommand implements BaseCommand {
private Object argument;
public ConcreteCommand(Object argument) {
this.argument = argument;
}
@Override
public void execute() {
// Work with own state.
}
}