アダプター パターンの紹介:
クラスのインターフェイスを顧客が望む別のインターフェイスに変換します。アダプター パターンを使用すると、インターフェイスに互換性がないために連携できないクラスが連携できるようになります。
コンピューター プログラミングでは、アダプター パターン (ラッパー スタイルまたはラッパーとも呼ばれる) は、クラスのインターフェイスをユーザーが期待するものに適合させます。適応により、互換性のないインターフェイスのために通常は連携できないクラスが、クラス独自のインターフェイスを既存のクラスでラップすることで連携できるようになります。
アダプター パターン構造図:
説明するための例を紹介します:
デモの説明としてログ プログラムを使用すると、どのソフトウェア セットにも対応するログ管理モジュールが存在します。ソフトウェア記録では、Log.Write("write log") メソッドを使用するログ記録用のサードパーティ ログ コンポーネントが使用されます。 Logging メソッドを使用しますが、サードパーティのログ コンポーネントは無料ではなくなり、課金する必要があるため、新しいログ管理モジュールを使用する予定ですが、そのモジュールが提供する API インターフェイスでは Log.WriteLog("New Write Log メソッド" を使用します) ); ロギングを実行します。この時点で、この移行の変更にどのように対処するかという問題が生じます
クラス アダプター モード
1. 元のログ インターフェイスは Write ("write log") メソッドを使用していました
/// <summary> /// 原来的日志记录接口 /// </summary> public interface ILogTarget { /// <summary> /// 原来的写日志方法 /// </summary> void Write(string info); }
2。インターフェイスは WriteLog (「ログの書き込み」) を使用します。ログをファイルとデータベースに書き込むための新しい方法を実装します
3. 元の書き込み方法を置き換える 2 つの新しいオブジェクトの使用方法ログ?
/// <summary> /// 抽象写日志类 /// </summary> public abstract class LogAdaptee { /// <summary> /// 写日志 /// </summary> public abstract void WriteLog(string info); }
/// <summary> /// 写文件日志记录 /// </summary> public class FileLog:LogAdaptee { /// <summary> /// 写日志到文件中 /// </summary> public override void WriteLog(string info) { Console.WriteLine("记录到文本文件:"+info); } }
4. 元のロギング メソッドが使用されますが、実際には新しいロギング メソッドが使用されます。
/// <summary> /// 往数据库中写日志 /// </summary> public class DatabaseLog:LogAdaptee { /// <summary> /// 重写写日志方法 /// </summary> public override void WriteLog(string info) { Console.WriteLine("记录到数据库:"+info); } }
オブジェクト アダプター パターン
1.新しいログ関数はこのように実装されます。 次に、オブジェクト アダプターを使用して 2 つのメソッドの特殊な機能を区別します。ログを書き込む元の方法は変わりません: Write("Write Log");
/// <summary> /// 采用新的写日志的方式,写入到数据库中 /// </summary> public class DatabaseLogAdapter:DatabaseLog,ILogTarget { /// <summary> /// 在重写ILogTarget接口中的的Write方法里面调用新的写日志的方式WriteLog /// </summary> public void Write(string info) { WriteLog(info); } }
2. 現在のログ書き込みインターフェイスは、WriteLog("Write Log") を使用して、新しい方法でログを書き込みます。 : ファイルとデータベースにログを書き込みます:
/// <summary> /// 采用新的写日志的方式,写入到文本文件 /// </summary> public class FileLogAdapter : FileLog, ILogTarget { /// <summary> /// 在重写ILogTarget接口中的的Write方法里面调用新的写日志的方式WriteLog /// </summary> public void Write(string info) { this.WriteLog(info); } }
/// <summary> /// 类 .NETアダプターパターンの説明(Adapter Pattern) /// </summary> class Program { static void Main(string[] args) { ILogTarget dbLog = new DatabaseLogAdapter(); dbLog.Write("程序启动成功"); dbLog = new FileLogAdapter(); dbLog.Write("程序启动成功"); } }
/// <summary> /// 原来的日志记录接口 /// </summary> public interface ILogTarget { /// <summary> /// 原来的写日志方法 /// </summary> void Write(string info); }
/// <summary> /// 抽象写日志类 /// </summary> public abstract class LogAdaptee { /// <summary> /// 写日志 /// </summary> public abstract void WriteLog(string info); }
/// <summary> /// 写文件日志记录 /// </summary> public class FileLog:LogAdaptee { /// <summary> /// 写日志到文件中 /// </summary> public override void WriteLog(string info) { Console.WriteLine("记录到文本文件:"+info); } }
/// <summary> /// 往数据库中写日志 /// </summary> public class DatabaseLog:LogAdaptee { /// <summary> /// 重写写日志方法 /// </summary> public override void WriteLog(string info) { Console.WriteLine("记录到数据库:"+info); } }