public interface IStreamFilter
{
string Delimiter {get; private set;}
List<string> FilterCriteria {get; private set;}
}
public class StreamFilter : IStreamFilter
{
public string Delimiter {get;}
public List<string> FilterCriteria {get;}
public void StreamFilter (string delimiter, List<string> filterCriteria)
{
this.Delimiter = delimiter;
this.FilterCriteria = filterCriteria;
}
}
Reader および Writer クラスのコンストラクターで IStreamFilter のインスタンスを渡すことができます。
public class MyReader
{
private IStreamFilter _streamFilter;
public MyReader(IStreamFilter streamFilter)
{
this._streamFilter = streamFilter;
}
public string ReadString()
{
var readString = reader.GetString(x => x.Contains(this._streamFilter.Delimiter);
// apply the filter for reading string
}
}
MyReader クラスをインスタンス化するコード内の任意の場所で、コンストラクターで IStreamFilter の新しいインスタンスを作成し、ユーザー設定 (ユーザー プロファイルからとしましょう) に従って区切り文字とその他のフィルター条件を設定できます。次に、その StreamFilter のインスタンスを MyReader インスタンスに渡します。そうすれば、シングルトンに依存することなく、その場でフィルター設定をカスタマイズできます。