我有一个编程任务,我必须创建一个需要很多步骤的对象。 我决定申请Builder。我做得对吗?我正在实施Builder模式吗?
我复杂的类(在模式的产品)
public class ProductExchangePlan
{
#region FixMembers
[Display(Name="Ütköző")]
public Bumper Bumper { set; get; }
[Display(Name = "Behelyezőnyomás")]
public float InsertionPressure { set; get; }
[Display(Name = "Magazin")]
public Magazin Magazin { set; get; }
#endregion
#region SimpleTags
[Display(Name = "Programszám")]
public string ProgramNumber { set; get; }
[Display(Name = "Kemény és puha minta")]
public string HardAndSoftSample { set; get; }
#endregion
[Display(Name = "Csaphossz")]
public float TapLength { set; get; }
[Display(Name = "Beigazító fej")]
public AdjustmentHead AdjustmentHead { set; get; }
[Display(Name = "Forgásirány")]
public RotationDirection RotationDirection { set; get; }
[Display(Name = "Vizsgálótüske")]
public TestPin TestPin { set; get; }
[Display(Name = "Betétdarab")]
public InsertionPiece InsertionPiece { set; get; }
[Display(Name = "Görgők behelyezése")]
public Station RollerInsertionStation { set; get; }
[Display(Name = "Nyomórugók behlyezése")]
public Station SpringInsertionStation { set; get; }
[Display(Name = "Csereütköző")]
public ExchangeBumper ExchangeBumper { set; get; }
[Display(Name="Zsírzófej")]
public GreasingHead GreasingHead { set; get; }
[Display(Name = "Zsírzóventilátor")]
public GreasingVentilator GreasingVentilator { set; get; }
}
而这些都是实施的其他部分:
/// <summary>
/// The 'Builder' interface
/// </summary>
interface IProductExchangePlanBuilder
{
ExchangePlanGeneratorViewModel Input { set; get; }
ProductExchangePlan ProductExchangePlan { set; get; }
void BuildFixMembers();
void BuildSimpleTags();
void BuildTapLength();
void BuildAdjustmentHead();
void BuildRotationDirection();
void BuildTestPin();
void BuildInsertionPiece();
void BuildRollerInsertionStation();
void BuildSpringInsertionStation();
void BuildExchangeBumper();
void BuildGreasingHead();
void BuildGreasingVentilator();
}
/// <summary>
/// The concrete builder
/// </summary>
public class ProductExchangePlanBuilder : IProductExchangePlanBuilder
{
public ProductExchangePlanBuilder(ExchangePlanGeneratorViewModel input)
{
this.Input = input;
this.ProductExchangePlan = new ProductExchangePlan();
}
public ExchangePlanGeneratorViewModel Input
{
get
{
...
}
set
{
...
}
}
public ProductExchangePlan ProductExchangePlan
{
get
{
...
}
set
{
...
}
}
public void BuildFixMembers()
{
...
}
public void BuildSimpleTags()
{
...
}
public void BuildTapLength()
{
...
}
public void BuildAdjustmentHead()
{
...
}
public void BuildRotationDirection()
{
...
}
public void BuildTestPin()
{
...
}
public void BuildInsertionPiece()
{
...
}
public void BuildRollerInsertionStation()
{
...
}
public void BuildSpringInsertionStation()
{
...
}
public void BuildExchangeBumper()
{
...
}
public void BuildGreasingHead()
{
...
}
public void BuildGreasingVentilator()
{
...
}
}
/// <summary>
/// The Director
/// </summary>
public class ProductExchangePlanDirector
{
public void Construct(IProductExchangePlanBuilder builder)
{
builder.BuildAdjustmentHead();
builder.BuildExchangeBumper();
builder.BuildFixMembers();
builder.BuildGreasingHead();
builder.BuildGreasingVentilator();
builder.BuildInsertionPiece();
builder.BuildRollerInsertionStation();
builder.BuildRotationDirection();
builder.BuildSimpleTags();
builder.BuildSpringInsertionStation();
builder.BuildTapLength();
builder.BuildTestPin();
}
}
所有的BuildXX方法使用的的ExchangePlanGeneratorViewModel Input
财产具体的建设者,并要求在数据库中查询。
所以我的问题是,这是一个很好的执行这项任务?你怎么能改进它?
难道你不喜欢单一的“构建”功能?在这种情况下,装饰者模式似乎更适合我。除非你的所有物体都有测试针的标头等。 – Stefan
@Stefan对象始终具有所有属性。只是值取决于用户输入的值。单个Build函数太长。 – jannagy02
好吧,它看起来像你遵循所有的规则:),在这种情况下,你很好去。我通常会尽量避免这种模式,因为它有很多责任,所以最终可能会产生大量的代码文件,而且这些文件很难维护。但这可能只是个人意见。 – Stefan