FC2ブログ

リファクタリング:ポリモーフィズムによる条件記述の置き換え

オブジェクトのタイプによって異なる振る舞いを選択する条件記述がある場合、
条件記述の各アクション部をサブクラスのオーバライドメソッドに移動します。
そして、元のメソッドはabstractにします。

public class Character
{
public string GetSkill()
{
switch (_job)
{
case Jobs.Hero:
return "ドラゴン斬り";

case Jobs.Thief:
return "ポイズンダガー";
}

throw new Exception("ここには来ないはず");
}
}

public abstract class Character
{
public abstract string GetSkill();
}

public class Hero : Character
{
public override string GetSkill()
{
return "ドラゴン斬り";
}
}

public class Thief : Character
{
public override string GetSkill()
{
return "ポイズンダガー";
}
}
ポリモーフィズムによって多くのメリットが得られます。
同じ条件分岐の組み合わせがプログラムの多くの場所に現れるときに最も効果が大きくなります。
新しいタイプを追加したいときには、すべての条件記述を見つけて変更しなければなりません。
しかし、サブクラスを使うなら、新たなサブクラスを作って、適切なメソッドを用意するだけで良いのです。
クラスのクライアントは、サブクラスについて知っている必要はありません。
そして、それによりシステム中の相互依存性は低下し、修正作業は容易になります。

リファクタリング―プログラムの体質改善テクニック (Object Technology Series)

Comment

Comment Form
公開設定

Trackback


→ この記事にトラックバックする(FC2ブログユーザー)
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。