浏览 1813 次
锁定老帖子 主题:命令模式(Command)
该帖已经被评为新手帖
|
|
---|---|
作者 | 正文 |
发表时间:2009-12-08
别名: 动作(Action) 事务(Transaction) 意图: 将一个请求封装为一个对象, 从而使你可用不同的请求对客户进行参数化; 对请求排队或记录请求日志, 以及支持可取消的操作. 动机: 怎么做到开放扩展呢? class Program def initialize @commands = [] end def add_cmd(cmd) @commands << cmd end def remove_cmd(cmd) @commands.delete(cmd) end def run @commands.each do |cmd| cmd.execute end end end class File attr_accessor :name def initialize(name) self.name = name end end class Command attr_accessor :file def execute raise 'abstract method' end end class OpenFileCommand < Command def initialize(file) self.file = file end def execute puts "文件#{@file.name}打开" end end class CloseFileCommand < Command def initialize(file) self.file = file end def execute puts "文件#{@file.name}关闭" end end program = Program.new afile = File.new("A file") bfile = File.new("B file") open_a_cmd = OpenFileCommand.new(afile) close_a_cmd = CloseFileCommand.new(afile) open_b_cmd = OpenFileCommand.new(bfile) close_b_cmd = CloseFileCommand.new(bfile) program.add_cmd(open_a_cmd) program.add_cmd(close_a_cmd) program.add_cmd(open_b_cmd) program.add_cmd(close_b_cmd) program.remove_cmd(close_b_cmd) program.run 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-12-08
最后修改:2009-12-08
puts "文件A file打开\n文件A file关闭\n文件B file打开" |
|
返回顶楼 | |