Tag: builder

具有inheritance的Builder设计模式:有更好的方法吗?

我正在创建一系列构建器来清理语法,为我的模拟创建域类,作为改进整体unit testing的一部分。 我的构建器基本上填充了一个域类(例如一个Schedule ),其中一些值通过调用适当的WithXXX并将它们链接在一起来确定。 我在构建器中遇到了一些共性,我想将它抽象到基类中以增加代码重用。 不幸的是,我最终看起来像: public abstract class BaseBuilder where BLDR : BaseBuilder where T : new() { public abstract T Build(); protected int Id { get; private set; } protected abstract BLDR This { get; } public BLDR WithId(int id) { Id = id; return This; } } 特别注意protected abstract BLDR This { […]

设计模式:生成器

我已经找到了一个很好的Builder模式示例(在C#中),但找不到一个,因为我不了解Builder模式,或者我正在尝试做一些从未想过的事情。 例如,如果我有一个抽象的汽车和抽象的构建方法来创建汽车零件,我应该能够将所有30个选择发送给Director,让它构建我需要的部件,然后构建我的汽车。 无论生产哪种汽车,卡车,半卡车等,我都应该能够以完全相同的方式“驾驶”它。 第一个问题是大多数示例硬编码属性值到具体部分,我认为应该来自数据库。 我认为这个想法是将我的选择发送给Director(来自数据源),并让构建器根据我的数据创建自定义产品。 第二个问题是我希望构建器方法实际创建部件然后将它们分配给产品,而不是传递字符串,而是真正的强类型产品部件。 例如,我想通过为我创建一个Builder制作表单字段来动态创建表单,包括标签,输入部分,validation等。这样我就可以从我的ORM中读取对象,查看对象的元数据,将其传递给我的Builder并将新创建的用户控件结果添加到我的Web表单中。 但是,我找到的每个Builder示例都只有硬编码数据,而不是将选择从主代码传递到Builder并开始定制产品。 一切似乎都是一个很大的静态案例陈述。 例如,如果我有三个参数,每个参数有10个选项,我不想构建30个具体的Builder方法,我想创建的只是足以制作我的产品所需的属性,可能只有三个。 我很想让Director只存在于主代码中。 应该有一种方法可以自动确定调用哪个具体的构建器方法,类似于多态和方法重载(尽管这是一个非常糟糕的例子),而不是在模式中使用case语句。 (每次我需要添加新的产品类型时,我都需要修改现有的Director,这很糟糕)。