【发布时间】:2011-10-18 18:03:57
【问题描述】:
尝试评估是否用构建器模式替换杂乱的图表助手类。在 helper 类中有如下方法:
[图表助手]
public static ChartTitle CreateStandardChartTitle(string titleText){}
public static void SetBarWidths( BarSeriesView bars ){}
public static void SetHorizontalChartHeight( WebChartControl chart,
int seriesCount, int margin ){}
public static void SetVerticalChartWidth( WebChartControl chart,
int seriesCount, int margin ){}
public static Legend SetStandardLegendProperties(WebChartControl chart){}
显然,这些方法修改了现有对象,只是修改了 WebChartControl 上的各种属性。这在大多数情况下都非常有效,但这些方法并不总是适用于所有可能的图表类型(条形图、折线图、饼图等),并且有时图表的外观会有不同的“配置”,这些配置与这些帮助器不同方法。 我没有尝试使用帮助类来满足这些不同的“配置”,而是想知道构建器模式。
据我了解,构建器模式用于构造复杂对象。在我的例子中,我已经创建了复杂的对象(WebChartControl)。因此,如果我要使用构建器模式,它只是结束而不是创建 WebChartControl。
我根据我的设想将一些代码放在一起:
导演:
public class ChartDirector
{
private WebChartControl chart;
public ChartDirector(WebChartControl chart)
{
this.chart = chart;
}
private StandardChartBuilder standardBuilder;
public void Construct(StandardChartBuilder standardBuilder)
{
this.standardBuilder = standardBuilder;
this.standardBuilder.Chart = this.chart;
this.standardBuilder.BuildBorderOptions();
this.standardBuilder.BuildPalette();
this.standardBuilder.BuildLegend();
this.standardBuilder.BuildSeriesLabel();
}
}
混凝土生成器:
public class BarChartBuilder : StandardChartBuilder
{
public WebChartControl Chart { get; set; }
public BarChartBuilder()
: base(ChartType.Bar)
{
}
public override void BuildBorderOptions()
{
Chart.BorderOptions.Visible = false;
}
...
}
抽象构建器,允许不同的配置...:
public abstract class StandardChartBuilder
{
public WebChartControl Chart { get; set; }
public StandardChartBuilder(ChartType chartType){}
public abstract void BuildSeriesLabel();
public abstract void BuildBorderOptions();
public abstract void BuildPalette();
public abstract Legend BuildLegend();
}
从上面的代码可以看出,ChartDirector 并没有创建一个 new 对象,它只是修改了一个正在被包装的现有对象的属性。
所以,我的问题仍然存在,我是否应该用构建器模式替换 ChartHelper 类,即使这不是构建器模式的纯粹实现?
【问题讨论】:
标签: c# design-patterns refactoring