FC2ブログ

リファクタリング:サブクラスによるタイプコードの置き換え

クラスの振る舞いに影響を与える不変のタイプコードがある場合、
そのタイプコードをサブクラスに置き換えます。

タイプコードが振る舞いに関係しないならば、
「クラスによるタイプコードの置き換え」が適用できます。
しかし、タイプコードが振る舞いに影響する場合、取るべき最善の手は、
変化する振る舞いを扱うためにポリモーフィズムを利用することです。
リファクタリング前
replace_type_code_with_polymorphism_1.png
リファクタリング後
replace_type_code_with_polymorphism_2.png

public class Character
{
private enum Jobs
{
Hero,
Thief,
}

private Jobs _job = Jobs.Hero;

public void Skill()
{
switch (_job)
{
case Jobs.Hero:
Debug.WriteLine("ドラゴン斬り");
break;

case Jobs.Thief:
Debug.WriteLine("ポイズンダガー");
break;
}
}
}

public abstract class Character
{
public abstract void Skill();
}

public class Hero : Character
{
public override void Skill()
{
Debug.WriteLine("ドラゴン斬り");
}
}

public class Thief : Character
{
public override void Skill()
{
Debug.WriteLine("ポイズンダガー");
}
}
リファクタリング―プログラムの体質改善テクニック (Object Technology Series)

Comment

Comment Form
公開設定

Trackback


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