区分网上已有的通常建造者模式实现,我的以为实现太单一了,本身google查了一些好的实现,挑了其中比较适合的,作个笔记。ide
# region 标准Builder模式实现 // 产品 class Television { public string Code { get; set; } public string DisplayTechnology { get; set; } public string HDFormat { get; set; } public string ScreenType { get; set; } public string Size { get; set; } public string Feature { get; set; } } // 抽象Builer abstract class TelevisionBuilder{ protected Television television; public abstract void SetCode();//ProductCode public abstract void SetDisplayTechnology(); //LCD, LED, OLED, Plasma, CRT public abstract void SetHDFormat(); // Full HD, HD Ready, Ultra HD, None public abstract void SetScreenType(); //Curved, Flat, Standard public abstract void SetSize(); // 22, 32, 40, 42, 54 public abstract void SetFeature(); //3D, Smart, Standard , HDMI Ports, USB Ports, Built in WIFI, Ethernet, Remote //获取产品 public Television Television { get => television; } } // 具体Builder(具体实现1) class FullHD40TVBuilder : TelevisionBuilder { public FullHD40TVBuilder() => television = new Television(); public override void SetCode() => television.Code = "FullHD40TV"; public override void SetDisplayTechnology() => television.DisplayTechnology = "LCD"; public override void SetHDFormat() => television.HDFormat = "FullHD"; public override void SetScreenType() => television.ScreenType = "Flat"; public override void SetSize() => television.Size = "40"; public override void SetFeature() => television.Feature = "1 HDMI Ports, 1 USB Ports, Remote"; } // 具体Builder(具体实现2) class SMARTLED54TVBuilder : TelevisionBuilder { public SMARTLED54TVBuilder() => television = new Television(); public override void SetCode() => television.Code = "SMARTLED54TV"; public override void SetDisplayTechnology() => television.DisplayTechnology = "LED"; public override void SetHDFormat() => television.HDFormat = "FullHD"; public override void SetScreenType() => television.ScreenType = "Flat"; public override void SetSize() => television.Size = "54"; public override void SetFeature() => television.Feature = "2 HDMI Ports, 2 USB Ports, Built in WIFI, Ethernet, Remote"; } // 环境角色(解耦做用) class TelevisionContext { public void Construction(TelevisionBuilder builder) { builder.SetCode(); builder.SetDisplayTechnology(); builder.SetFeature(); builder.SetHDFormat(); builder.SetScreenType(); builder.SetSize(); } } #endregion // 在客户端调用: var builder1 = new SMARTLED54TVBuilder(); var builder2 = new FullHD40TVBuilder(); var ctx = new TelevisionContext(); ctx.Construction(builder1); ctx.Construction(builder2); var product1 = builder1.Television; var product2 = builder2.Television; Console.WriteLine($"产品1生产完成,详细:{JsonConvert.SerializeObject(product1)}"); Console.WriteLine($"产品2生产完成,详细:{JsonConvert.SerializeObject(product2)}");
相比较来说,这个实现更细致,并且充分利用了C#的基本语法,并无额外在建立一个函数返回产品,相对更简洁更"高大上",哈哈....函数