概述
子部件(对象)比较多,对象不能当作一个完整的对象或者产品使用(邮件:发件人,收件人、抄送人、主题、邮件内容)
子部件需要按照一定的顺序赋值才有一定的意义,在某个子部件没有赋值之前,另一个子部件就无法赋值。.
类图

注:该类图来源网上
需求
未使用建造者模式的代码
/// <summary>/// 产品类/// </summary>public class Computer{private List<string> _servers = new List<string>();public void AddPart(string part){_servers.Add(part);}public void ShowComputer(){foreach (var item in _servers){Console.WriteLine($"正在安装{item}");}}}
//C#控制台调用Computer computer = new Computer();computer.AddPart("i5的cpu");computer.AddPart("256G的硬盘");computer.AddPart("32G的内存");computer.AddPart("17寸的显示器");computer.AddPart("win7的操作系统");computer.ShowComputer();
使用建造者模式的代码
public interface IBuilderComputer{//1 封装创建各个部件的过程void BuildCpu();void BuildDisk();void BuildMemory();void BuildScreen();void BuildSystem();//2、将创建好的复杂对象返回Computer GetComputer();}
public class MyDirectory{public void BuildComputer(IBuilderComputer builderComputer){builderComputer.BuildCpu();builderComputer.BuildDisk();builderComputer.BuildMemory();builderComputer.BuildScreen();builderComputer.BuildSystem();}}
/// <summary>/// 具体建造者一/// </summary>public class GoodComputer : IBuilderComputer{private Computer _computer=new Computer();public void BuildCpu(){_computer.AddPart("i7的cpu");}public void BuildDisk(){_computer.AddPart("2T的固态硬盘");}public void BuildMemory(){_computer.AddPart("32G的内存");}public void BuildScreen(){_computer.AddPart("32寸的显示屏的内存");}public void BuildSystem(){_computer.AddPart("win10的操作系统");}public Computer GetComputer(){return _computer;}}
/// <summary>/// 具体建造者二/// </summary>public class BadComputer : IBuilderComputer{private Computer _computer = new Computer();public void BuildCpu(){_computer.AddPart("i3的cpu");}public void BuildDisk(){_computer.AddPart("126的机械硬盘");}public void BuildMemory(){_computer.AddPart("2G的内存");}public void BuildScreen(){_computer.AddPart("14寸的显示屏的内存");}public void BuildSystem(){_computer.AddPart("win7的操作系统");}public Computer GetComputer(){return _computer;}}
/// <summary>/// 产品类/// </summary>public class Computer{private List<string> _servers = new List<string>();public void AddPart(string part){_servers.Add(part);}public void ShowComputer(){foreach (var item in _servers){Console.WriteLine($"正在安装{item}");}}}
//C#控制台调用Console.WriteLine("建造者设计模式正式登场");IBuilderComputer b1=new GoodComputer();IBuilderComputer b2 = new BadComputer();MyDirectory directory = new MyDirectory();directory.BuildComputer(b1);var goodComputer= b1.GetComputer();goodComputer.ShowComputer();directory.BuildComputer(b2);var badComputer= b2.GetComputer();badComputer.ShowComputer();