7
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Commandパターンについて調べた

Last updated at Posted at 2015-10-30

デザインパターン勉強の一貫として、Commandパターンについて調べたのでまとめてみました。それと、CommandパターンをRubyで書いてみました。

Commandパターンとは

  • 振る舞いに関するパターン(GoF)
  • 動作とそれに伴うパラメータをカプセル化したもの
  • あるオブジェクトに対してコマンドを送ることでそのオブジェクトのメソッドを呼び出すこと
  • 命令・操作をクラス(オブジェクト)で表現し、オブジェクトを切り替えることで操作の切り替えを実現する
  • 命令を実行する

Commandパターンのメリット

  • 既存のコードを修正することなく機能拡張できること
  • クラスの再利用性を向上させること

Rubyで書いてみた

Command(命令)

class BattleCommand
  def initialize
    @battle = BattleReceiver.new()
  end
  def battle()
  end
end

ConcreateCommand(具体的な命令)

class Fight < BattleCommand
  def battle()
    @battle.battle_fight
  end
end

class Magic < BattleCommand
  def battle()
    @battle.battle_magic
  end
end

class Flee < BattleCommand
  def battle()
    @battle.battle_flee
  end
end

Receiver(受信者)

class BattleReceiver
  def battle_fight
    puts 'Fight'
  end
  def battle_magic
    puts 'Magic'
  end
  def battle_flee
    puts 'Flee'
  end
end

Invoker(起動者)

class Controller
  def fight
    battle(Fight.new)
  end
  def magic
    battle(Magic.new)
  end
  def flee
    battle(Flee.new)
  end

  private

  def battle(command)
    command.battle
  end
end

Client(依頼者)

class BattleClient
  def initialize()
    @controller = Controller.new
  end
  def fight
    @controller.fight
  end
  def magic
    @controller.magic
  end
  def flee
    @controller.flee
  end
end
battle = BattleClient.new
battle.fight
battle.magic
battle.flee

実行結果

$ ruby command.rb 
Fight
Magic
Flee

参考

命令をクラスにするCommandパターン - 感謝のプログラミング 10000時間
「Rubyによるデザインパターン」の要点と使いどころ#Commandパターン - Qiita
【デザインパターン】コマンドパターン - datchの日記
コマンド Ruby 2.0.0 デザインパターン速攻習得[Command][Design Pattern] - 酒と泪とRubyとRailsと

7
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?