百度百科中对命令模式的解释:
在软件系统中,“行为请求者”与“行为实现者”通常呈现一种“紧耦合”。但在某些场合,比如要对行为进行“记录、撤销/重做、事务”等处理,这种无法抵御变化的紧耦合是不合适的。在这种情况下,如何将“行为请求者”与“行为实现者”解耦?将一组行为抽象为对象,实现二者之间的松耦合。这就是命令模式(Command Pattern)
命令模式的本质是对命令进行封装,将发出命令的责任和执行命令的责任分割开, 命令本身也是一个对象, 这个对象和其他对象一样可以被存储和传递。
class Command
attr_reader :description
def initialize(description)
@description = description
end
def execute
end
end
class CreateFile < Command
def initialize(file_name)
super("create file: #{file_name}")
end
def execute
puts "creating file"
end
def unexecute
puts "deleting created file"
end
end
class CopyFile < Command
def initialize(file_name)
super("copy file: #{file_name}")
end
def execute
puts "copying file"
end
def unexecute
puts "deleting copied file"
end
end
class CompositeCommand < Command
def initialize
@commands = []
end
def add_command(cmd)
@commands << cmd
end
def execute
@commands.each { |cmd| cmd.execute }
end
def unexecute
@commands.reverse.each { |cmd| cmd.unexecute }
end
def description
description = ""
@commands.each { |cmd| description += cmd.description + "\n" }
description
end
end
cmds = CompositeCommand.new
cmds.add_command(CreateFile.new("file"))
cmds.add_command(CopyFile.new("file"))
cmds.execute
cmds.unexecute