建造者模式将一个复杂对象的结构与它的表示分离,使得同样的构造过程可以创建不同的表示
Product就是具体的产品
AbstractorBuilder是为了创建一个Product对象的各个部件指定的抽象接口
ConstracteBuilder是具体建造者,实现AbstractorBuilder中的接口,构造和装配各个部件。
DireactorBuilder就是指挥者,根据用户的需求构建不同的产品
建造者模式使用的场景
主要使用于创建一些复杂的对象,这些对象内部构建间的建造顺序通常是稳定的,但对象内部的构建通常面临着复杂的变化。建造者模式是在创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时适用的模式
参考代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 建造者模式
{
public class Car
{
List<string> list = new List<string>();
public void Add(string str)
{
list.Add(str);
}
public void Show()
{
foreach (var item in list)
{
Console.WriteLine(item);
}
}
}
public abstract class AbstractBuilder
{
protected Car car = new Car();
public abstract void BuildWheel();
public abstract void BuildBody();
public abstract void BuildEngine();
public abstract Car GetBuilderResult();
}
class CarBuilder : AbstractBuilder
{
public override void BuildBody()
{
car.Add("小汽车车身");
}
public override void BuildEngine()
{
car.Add("小汽车引擎");
}
public override void BuildWheel()
{
car.Add("小汽车轮胎");
}
public override Car GetBuilderResult()
{
return car;
}
}
class JeepBuilder : AbstractBuilder
{
public override void BuildBody()
{
car.Add("Jeep车身");
}
public override void BuildEngine()
{
car.Add("Jeep引擎");
}
public override void BuildWheel()
{
car.Add("Jeep轮胎");
}
public override Car GetBuilderResult()
{
return car;
}
}
class DireacorBuilder
{
public Car Build(AbstractBuilder absBuilder)
{
absBuilder.BuildBody();
absBuilder.BuildEngine();
absBuilder.BuildWheel();
return absBuilder.GetBuilderResult();
}
}
class Program
{
static void Main(string[] args)
{
DireacorBuilder db = new DireacorBuilder();
CarBuilder cb = new CarBuilder();
Car car = db.Build(cb);
car.Show();
JeepBuilder jeepBuiler = new JeepBuilder();
Car jeep = db.Build(jeepBuiler);
jeep.Show();
}
}
}