Skip to main content

💡 轉接器模式

Adapter Pattern

概述

  • 在寫程式的過程中,我們經常會面臨不能修改原始碼或不允許修改的情況。轉接器模式就是為了解決這種情境而出現的設計模式
  • 它允許我們在不修改原有類的情況下,將其與客戶端代碼相適配

範例

  • 需求: 需要依照不同的情境,來輸出不同的檔案格式

1. 以下是目前現有的輸出檔案程式

  internal interface IFileWitter
{
void Write();
}

internal class JsonFileWitter : IFileWitter
{
public void Write()
{
Console.WriteLine("File.json");
}
}

internal class CsvFileWitter : IFileWitter
{
public void Write()
{
Console.WriteLine("File.csv");
}
}

2. 在不異動現有輸出檔案程式的情況下,我們需要新增一層轉接器

    internal interface IFileTool
{
void Create();
}

internal class Adapter : IFileTool
{
private readonly IFileWitter _tool;

public Adapter(IFileWitter tool)
{
_tool = tool;
}

public void Create()
{
_tool.Write();
}
}

3. 此處用簡單工廠來建立轉接器,並注入輸出檔案的類別

    internal static class FileTool
{
public static IFileTool Factory(string fileType)
{
return fileType switch
{
"json" => new Adapter(new JsonFileWitter()),
"csv" => new Adapter(new CsvFileWitter()),
_ => throw new ArgumentException($"尚未實做 {fileType}"),
};
}
}

4. 客戶端使用

FileTool.Factory("json").Create();
FileTool.Factory("csv").Create();

5. 結果

  • 輸出:
File.json
File.csv