与其说是建造者模式,还不如通俗的说工厂生产模式。当然只是为了自己的理解和应用模式
1、我们需要的是生成需要的组件 A,B……
2、生产流水线通过产品的QA,通过QA的产品就是一个完成的产品,一个可以展示的产品。
3、产品工程师,他给你生产制造的工艺文档,告诉你怎么去完成这个产品的组装
4、出来的产品了。
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace 建造者模式 { //生成的产品的车间 public class Product { private IList<string> parts = new List<string>(); //按顺序添加组件 public void Add(string part) { parts.Add(part); } //安装组件 public void Show() { Console.WriteLine("产品开始在组装……"); foreach (var item in parts) { Console.WriteLine("组件" + item + "已装好"); } Console.WriteLine("产品完成。"); } } //产品工程师 public class Builder { private Product product = new Product(); //A模块组装 public void BuildPartA() { product.Add("手机主板+配件"); } //B模块组装 public void BuildPartB() { product.Add("手机外壳"); } //获得的产品 public Product GeProduct() { return product; } //组装成产品 public void Construct() { BuildPartA(); BuildPartB(); product.Add("打包成盒"); } } class Program { private static Builder builder; static void Main(string[] args) { builder = new Builder(); builder.Construct(); Product product = builder.GeProduct(); product.Show(); Console.Read(); } } }
看到这张图,是不是发现少了些东西。没错,少了标准流程的东西
改进下
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace 建造者模式 { //生成的产品的车间 public class Product { private IList<string> parts = new List<string>(); //按顺序添加组件 public void Add(string part) { parts.Add(part); } //安装组件 public void Show() { Console.WriteLine("产品开始在组装……"); foreach (var item in parts) { Console.WriteLine("组件" + item + "已装好"); } Console.WriteLine("产品完成。"); } } //产品工程师 public class Builder : PhoneBuilder { private Product product = new Product(); //A模块组装 public void BuildPartA() { product.Add("手机主板+配件"); } //B模块组装 public void BuildPartB() { product.Add("手机外壳"); } //获得的产品 public Product GeProduct() { return product; } //组装成产品 public void Construct() { BuildPartA(); BuildPartB(); product.Add("打包成盒"); } } //生成手机要的流程,不能偷工减料 public abstract class PhoneBuilder { public abstract void BuildPartA(); public abstract void BuildPartB(); public abstract void GeProduct(); public abstract void Construct(); } class Program { private static Builder builder; static void Main(string[] args) { builder = new Builder(); builder.Construct(); Product product = builder.GeProduct(); product.Show(); Console.Read(); } } }
时间: 2024-12-29 17:31:50