デザインパターンの1つである「Adapterパターン」の基本的な使い方を解説します。
環境
- Visual Studio 2022
 - .NET 6
 
Adapterパターンとは
互換性がないクラス同士を連携させるためのパターンです。
新たにAdapterクラスを用意することで、既存クラスに変更を加えずにインターフェースを変更することができます。
変更したくない古いクラスや、変更ができない外部のクラスを、自分のシステムに組み込みたい場合などに使用されます。
Adapterパターンの実装例
インターフェースを実装していないレガシーな既存クラスを、インターフェース実装済みのクラスと同じように使用したい場合のサンプルコードです。
namespace AdapterPattern
{
    /// <summary>
    /// ターゲットインターフェース
    /// </summary>
    public interface IService
    {
        void ShowMessage();
    }
    /// <summary>
    /// IServiceインターフェースを実装する現在のクラス
    /// </summary>
    public class CurrentService : IService
    {
        public void ShowMessage()
        {
            Console.WriteLine("カレントサービスです");
        }
    }
    /// <summary>
    /// IServiceインターフェースを実装しないレガシーなクラス(Adapteeクラス)
    /// 長年使われており変更したくないが、現在のクラスと同じように呼び出したい
    /// </summary>
    public class LegacyService
    {
        public void LegacyMethod()
        {
            // 複雑な処理
            Console.WriteLine("レガシーサービスです");
        }
    }
    /// <summary>
    /// IServiceインターフェースを実装し、LegacyServiceの機能を利用するためのAdapterクラス
    /// </summary>
    public class LegacyServiceAdapter : IService
    {
        private readonly LegacyService _service;
        public LegacyServiceAdapter()
        {
            _service = new LegacyService();
        }
        public void ShowMessage()
        {
            // ShowMessageメソッド内でレガシーサービスのメソッドを実行
            _service.LegacyMethod();
        }
    }
    /// <summary>
    /// クライアント
    /// </summary>
    class Program
    {
        static void Main()
        {
            // 各サービスをインスタンス化
            var services = new List<IService>
            {
                new CurrentService(),
                new LegacyServiceAdapter()
            };
            // 各サービスのShowMessageメソッドを順次実行
            foreach (var service in services)
            {
                service.ShowMessage();
            }
        }
    }
}レガシーサービスをターゲットインターフェースに適合させるために、新たにAdapterクラスを用意し、その中でレガシーサービスのメソッドを実行しています。
こうすることで、レガシーサービスを変更せずに現在のインターフェースに適合させることができます。
サンプルコードを実行すると、現在のサービスと同様にレガシーサービスのメソッドが実行されていることが確認できます。

デザインパターンのおすすめ教材
①サンプルコードはJavaですが、豊富なイラストや柔らかい文体で抵抗なくデザインパターンを学べます。
著:Eric Freeman, 著:Elisabeth Robso, 監修:佐藤 直生, 翻訳:木下 哲也
				
									
						¥5,280						(2025/10/31 22:58時点 | Amazon調べ)
					
				
							②C#を使って手を動かしながらデザインパターンを学ぶならこちらの教材がおすすめです。
【Udemy】デザインパターン2:Adapter,Singleton,Observer【C#】
