Tbpgr Blog

Employee Experience Engineer tbpgr(てぃーびー) のブログ

手続き型Java

まじやめて・・・。
Javaでこんな実装を依頼されてしまった。
Javaで、といいつつJavaコードを書くのが面倒なのでRubyで例示します。

例えば文字列の処理をするStringAクラス、StringBクラス。
日付の処理をするDateAクラス、DateBクラス。
SQLの処理をするSqlAクラス,SqlBクラス。
があるする。

この全てをexecuteメソッドを持つAnyClassクラスを継承して、
て使わせるような設計を指示された。
当然Commandパターン的な意味合いもない。

つまりクラスには何も意味をもたせず、ただ単に何かを実行させる箱だという認識か。
オブジェクト指向で手続き型コーディングさせるの勘弁してください・・・

イメージ

本来のクラス図


依頼されたクラス図


以下サンプルコード

class AnyClass
  def execute()
    execute_child
  end
  protected
  def execute_child;;end
end

class StringA < AnyClass
  protected
  def execute_child;puts "StringA";end
end
class StringB < AnyClass
  protected
  def execute_child;puts "StringB";end
end

class DateA < AnyClass
  protected
  def execute_child;puts "DateA";end
end
class DateB < AnyClass
  protected
  def execute_child;puts "DateB";end
end

class SqlA < AnyClass
  protected
  def execute_child;puts "SqlA";end
end
class SqlB < AnyClass
  protected
  def execute_child;puts "SqlB";end
end

any_classes = [StringA.new,StringB.new,DateA.new,DateB.new,SqlA.new,SqlB.new]
any_classes.each {|any_class|any_class.execute}

出力

StringA
StringB
DateA
DateB
SqlA
SqlB