はじめに
こんにちは、東京アプリケーションシステム第二ソリューション部のK.T.です。
今回は、Interface を使って実装しようということで、Interface を用いた実装例を紹介したいと思います。
利点
Interface で実装することで、コードの拡張性を高め、変更を簡単にすることができます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
public class Program { public static void main(string[] args) { var statusCode = int.Parse(args[0]); var displayName = getDisplayName(statusCode); Console.WriteLine(displayName); } public static string getDisplayName(int stateCode) { if(stateCode == 0) return "processing"; if(stateCode == 1) return "processed"; throw new ArgumentException(); } } |
この実装では getDisplayName は指定された、数値に基づいて対応するステータス名を返します。
新しい状態が追加された場合は、このクラスに変更を加える必要があります。
また、ステータスの説明を取得する getDescription 等を実装しようとすると、このクラス自体に実装を追加していくことになり、コードが肥大化していきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
public class Program { public static void main(string[] args) { var stateCode = int.Parse(args[0]); var state = getState(stateCode); var displayName = state.getDisplayName(); Console.WriteLine(displayName); } public static IState getState(int stateCode) { if(stateCode == 0) return new Processing(); if(stateCode == 1) return new Processed(); throw new ArgumentException(); } public interface IState { string getDisplayName(); } public class Processing : IState { public string getDisplayName() => "processing"; } public class Processed : IState { public string getDisplayName() => "processed"; } } |
Interface での実装では、新しい状態を追加する際には、Interface を継承したクラスを追加することで、実装することができます。また、新しい関数を追加する場合にも、Interface を介して各クラスに実装するのでコードが肥大化しにくくなります。
まとめ
Interface を使うことで、拡張性が高く変更に強い実装をすることができます。