重要なポイントの 1 つは、デカップリングです。上記のコードでは、どのケースが存在するかを知る必要があります。毎回それらすべてをリストする必要があります。switch 分岐からのロジックを仮想メソッドに配置すると、呼び出しコードは不要になります。
- どのようなケースが実際に存在し、
- 各ケースのロジックは何ですか。
代わりに、ロジックはクラス内の属する場所に配置されます。
ここで、別のケースを追加することを検討してください。コードでは、そのような switch ステートメントが使用されているプログラム内のすべての場所に触れる必要があります。それらを見つけなければならないだけでなく (どれも見逃さないでください!)、他の人が使用するある種のライブラリのコードを書いているので、それらは自分のコードにないかもしれません。仮想メソッドを使用すると、新しいクラスで必要に応じていくつかのメソッドをオーバーライドするだけで、すべてがすぐに機能します。
BaseTask = class
{
virtual void Perform() = 0;
}
TaskOne = class(BaseTask)
{
void Perform() { cout << "Formatting hard disk ..."; }
}
TaskTwo = class(BaseTask)
{
void Perform() { cout << "Replacing files with random content ..."; }
}
だから今、呼び出しコードはする必要があります
foreach( BaseTask task in Tasks) // pseudo code
{
task.Perform();
}
ここで、別のタスクを追加するとします。
TaskThree = class(BaseTask)
{
void Perform() { cout << "Restoring everything form the backup..."; }
}
これで完了です。スイッチの編集もケースの追加もありません。それはどれほどクールですか?