필자는 빌더 패턴의 사용법, 특히 빌더 유형 작성 방법을 명확히하고 싶습니다. 예를 들어, 빌더의 유형을 가정하고 작성합니다. 그러나 'ChartBuilderFactory'클래스에 CreateBuilder
메소드를 작성하여 전달 된 일부 오브젝트를 기반으로 빌더 유형을 리턴합니다. 이것이 최선의 방법인가요? 필자는 샘플 코드를 게시했으며 더 나은 디자인을위한 대안과 제안을 고맙게 생각합니다.작성자 패턴의 빌더 생성
class Program
{
static void Main(string[] args)
{
DataObject data = new DataObject("basic", 2);
ChartDirector director = new ChartDirector();
ChartBuilderFactory builderFactory = new ChartBuilderFactory();
ChartBuilder builder = builderFactory.CreateChartBuilder(data);
director.Construct(builder);
Console.WriteLine(builder.GetChart());
Console.ReadKey();
}
}
class ChartBuilderFactory
{
public ChartBuilder CreateChartBuilder(DataObject data)
{
ChartBuilder builder;
if (data.DataType == "basic")
builder = new ChartBuilderBasic(data);
else if (data.DataType == "vector")
builder = new ChartBuilderVector(data);
else
builder = null;
return builder;
}
}
class ChartDirector
{
public void Construct(ChartBuilder builder)
{
builder.CreateChart();
builder.LoadData();
}
}
abstract class ChartBuilder
{
protected string myChartObject = "";
protected DataObject data;
public ChartBuilder(DataObject data)
{
this.data = data;
}
abstract public void CreateChart();
abstract public void LoadData();
public string GetChart() { return myChartObject; }
}
class ChartBuilderBasic : ChartBuilder
{
public ChartBuilderBasic(DataObject data)
: base(data) { }
public override void CreateChart()
{
myChartObject = "MyBasicChart";
}
public override void LoadData()
{
myChartObject += Convert.ToString(data.Data);
}
}
class ChartBuilderVector : ChartBuilder
{ /** Alternative Implementation here */ }
class DataObject
{
/** Constructor and private member variables here */
public string DataType { get { return this.dataType; } }
public int Data { get { return this.data; } }
}
aqwert 님의 답변에 대한 업데이트 된 질문. – Seth