.NETアダプターパターンの説明

高洛峰
リリース: 2016-12-20 13:12:52
オリジナル
1168 人が閲覧しました

アダプター パターンの紹介:

クラスのインターフェイスを顧客が望む別のインターフェイスに変換します。アダプター パターンを使用すると、インターフェイスに互換性がないために連携できないクラスが連携できるようになります。

コンピューター プログラミングでは、アダプター パターン (ラッパー スタイルまたはラッパーとも呼ばれる) は、クラスのインターフェイスをユーザーが期待するものに適合させます。適応により、互換性のないインターフェイスのために通常は連携できないクラスが、クラス独自のインターフェイスを既存のクラスでラップすることで連携できるようになります。

アダプター パターン構造図:

.NETアダプターパターンの説明

説明するための例を紹介します:

デモの説明としてログ プログラムを使用すると、どのソフトウェア セットにも対応するログ管理モジュールが存在します。ソフトウェア記録では、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);
}
ログイン後にコピー
ログイン後にコピー

3. 上記では、FileLog、DatabaseLog、および ILogTarget インターフェイスを継承する FileLogAdapter クラス、DatabaseLogAdapter クラスを追加し、新しい The way を呼び出す Write メソッドをオーバーライドしました。ログを書き込むには、WriteLog を使用します。移行の変更はこの方法で行われます。オブジェクト適応は以下で使用されます:

/// <summary>
/// 抽象写日志类
/// </summary>
public abstract class LogAdaptee
{
  /// <summary>
  /// 写日志
  /// </summary>
  public abstract void WriteLog(string info);
}
ログイン後にコピー
ログイン後にコピー

4. プログラム内で呼び出します:

/// <summary>
/// 写文件日志记录
/// </summary>
public class FileLog:LogAdaptee
{
  /// <summary>
  /// 写日志到文件中
  /// </summary>
  public override void WriteLog(string info)
  {
    Console.WriteLine("记录到文本文件:"+info);
  }
}
ログイン後にコピー
ログイン後にコピー

クラス適応メソッドで、アダプター クラス DatabaseLogAdapter と FileLogAdapter を取得します。は、継承する親クラスのすべての動作を持ち、また、ILogTarget インターフェイスのすべての動作も持ちます。これは、オブジェクト指向設計原則におけるクラスの単一責任原則に実際に違反しますが、オブジェクト アダプタはオブジェクトに準拠しています。志向の精神のため、クラス適応は実際のアプリケーションでは推奨されません。ログを記録するときに適応されたクラスをファイルとデータベースに同時に書き込みたいと仮定すると、オブジェクト アダプターを使用して次のように記述します。代わりにクラスアダプターを使用します。この書き方を使用して目標を達成できますか?

/// <summary>
/// 往数据库中写日志
/// </summary>
public class DatabaseLog:LogAdaptee
{
  /// <summary>
  /// 重写写日志方法
  /// </summary>
  public override void WriteLog(string info)
  {
    Console.WriteLine("记录到数据库:"+info);
  }
}
ログイン後にコピー
ログイン後にコピー

このように詳細を書くのは間違いです。さまざまな状況に応じて、適応的なスケジューリングに適切な方法を採用する必要があります。

以上がこの記事の全内容です。皆さんの学習に役立つことを願っています。また、皆さんも PHP 中国語 Web サイトをサポートしていただければ幸いです。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート