概述
子部件(对象)比较多,对象不能当作一个完整的对象或者产品使用(邮件:发件人,收件人、抄送人、主题、邮件内容)
子部件需要按照一定的顺序赋值才有一定的意义,在某个子部件没有赋值之前,另一个子部件就无法赋值。.
类图
注:该类图来源网上
需求
未使用建造者模式的代码
/// <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();