应该将构建器模式用作包装器吗?
本文关键字:包装 模式 构建 | 更新日期: 2023-09-27 18:11:50
尝试评估是否用构建器模式替换混乱的图表帮助器类。在helper类中有如下方法:
[ChartHelper]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上的各种属性。这在大多数情况下都很有效,但这些方法并不总是适用于所有可能的图表类型(条形图、线形图、饼形图等),而且有时图表的外观会偏离这些辅助方法的不同"配置"。与其尝试使用helper类来满足这些不同的"配置",我更想知道构建器模式。
根据我的理解,构建器模式是用来构造复杂对象的。在我的例子中,我已经创建了复杂的对象(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并没有创建一个新的对象,它只是修改了一个已经存在的对象的属性。
所以,我的问题仍然存在,我应该用构建器模式替换ChartHelper类,即使这不是构建器模式的纯粹实现?
好吧,在我看来,如果你确信任何图表在你的应用程序可以操纵(叫它配置,如果你愿意)与这个或其他但唯一的方法或属性集,你可以切换到Builder模式。问题是你的短语
而不是试图满足这些不同的配置
可以适用于单个抽象StandardChartBuilder
类提供的方法和属性的领域。如果是,Builder绝对是一个选项。