模式 / 结构模式
image

using System;
using System.Collections.Generic;

TextAdapter GetTextAdapter() {        
    TextAdapter adapter = new TextAdapter();
    StringList rowList = new StringList();
    rowList.Add("line 1");
    rowList.Add("line 2");
    adapter.RowList = rowList;
    return adapter;
}

//Client
var adapter = GetTextAdapter();
var text = adapter.GetText();
//text: line 1
//      line 2

Console.WriteLine(text);

//Target
interface IText {
    //Request()
    String GetText();
}

//Adaptee
class StringList {
    readonly List<String> _rows = 
    new List<String>();

    //SpecificRequest()
    public String GetString() {
        return string.Join("\n", _rows);
    }

    public void Add(String value) {
        _rows.Add(value);
    }
}

//Adapter
class TextAdapterIText {

    public StringList RowList { getset; }

    //Request()
    public String GetText() {
        if (RowList == null) {
            return "";
        }           
        return RowList.GetString();
    }
}