デザインパターン-Command



Commandパターンとは

Commandパターンとは、命令・操作をクラス(オブジェクト)で表現し、オブジェクトを切り替えることで操作の切り替えを実現するパターンです。

1つ以上の命令を1つのオブジェクトで表現して、命令の詳細処理をカプセル化します。

「Command」とは「命令」を意味します。


Commandパターンの利点


構成要素


rubyによるCommandパターンの実装

#!/usr/bin/env ruby

# Command(命令) のインタフェースを定義します。
class Command
  attr_reader :description
  def initialize(description)
    @description = description
  end
  
  # 特定の何かをするための命令
  def execute
  end
end

# ConcreteCommand(具体的な命令) 
class CreateFile < Command
  def initialize(path)
    super("Create file : #{path}")
    @path = path
  end
  
  def execute
    f = File.open(@path, "w")
    f.close
  end
end

# ConcreteCommand(具体的な命令) 
class DeleteFile < Command
  def initialize(path)
    super("Delete file : #{path}")
    @path = path
  end
  
  def execute
    File.delete(@path)
  end
end

# Invoker(起動者) 
class CompositCommand < Command
  def initialize
    @commands = []
  end
  
  def append(cmd)
    @commands << cmd
  end
  
  def execute
    @commands.each { |cmd| cmd.execute }
  end
  
  def description
    puts("実行コマンドは設定されていません。") if(@commands.empty?)
    @commands.each { |cmd| puts(cmd.description) }
  end

  # 最後の命令を削除
  def undo
    @commands.pop if(!@commands.empty?)
  end

  def clear
    @commands.clear
  end
end

cmds = CompositCommand.new
cmds.append(CreateFile.new("file1.txt"))
cmds.append(DeleteFile.new("file1.txt"))
cmds.description
cmds.execute

関連ページ



スポンサード リンク