与嵌套对象的生成器模式
嗨,我遇到了问题。
我想实现构建器模式以使创建对象更容易。 我面临的问题与嵌套对象有关。 我想要创建的对象中有一个其他对象的列表,我真的不知道如何解决它。
我希望能够执行以下操作(例如,更简单的对象):
Receipt RestaurantReceipt = new ReceiptBuilder() .withDate("value") .withName("value") .AddItem("value") .WithIngredients("value") .WithType("value") .AddItem("value") .WithIngredients("value") .WithType("value") .build();
或类似的东西:
Receipt RestaurantReceipt = new ReceiptBuilder() .withDate("value") .withName("value") .AddItem("value", item => { .WithIngredients("value") .WithType("value") }) .AddItem("value", item => { .WithIngredients("value") .WithType("value") }) .build();
示例应该代表我的情况,尽管如果有多种类型的嵌套对象。
给出这样的代码
var rb = new ReceiptBuilder(); var receipt = rb.WithName("Name") .WithDate(DateTime.Now) .WithItem("Item1", i => i.WithIngredients("Ingredients1")) .WithItem("Item2", i => i.WithIngredients("Ingredients1")) .Build(); Console.WriteLine(receipt);
您的构建器非常简单,在AddItem
构建器方法中使用一些简单谓词,以允许使用者将类似“构建器”模式中的每个项目配置到顶级ReceiptBuilder
:
public class ReceiptBuilder { private Receipt r; public ReceiptBuilder() { r = new Receipt(); } public ReceiptBuilder WithName(string name) { r.Name = name; return this; } public ReceiptBuilder WithDate(DateTime dt) { r.Date = dt; return this; } public ReceiptBuilder WithItem(string text, Action itemBuilder) { var rib = new ReceiptItemBuilder(text); itemBuilder(rib); r.AddItem(rib.Build()); return this; } public Receipt Build() { return r; } } public class ReceiptItemBuilder { private ReceiptItem ri; public ReceiptItemBuilder(string text) { ri = new ReceiptItem(text); } public ReceiptItemBuilder WithIngredients(string ings) { ri.Ingredients = ings; return this; } // WithType omitted for brevity. internal ReceiptItem Build() { return ri; } }
工作示例: http : //rextester.com/IRR50897
上述就是C#学习教程:与嵌套对象的生成器模式分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1009012.html