小明的水果店开了几天生意红火,小明发现水果要是能几种类型一起卖就好了这样不仅卖得快而且收益也不低,小明决定几种水果拼在一起卖固定20块钱一个拼盘,这样顾客花20块钱就可以吃到不同的水果了
建造者模式(Builder Pattern):将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示
建造者模式是一种对象创建型模式,它将客户端与多个部件的复杂对象的创建过程分离,客户端无需知道复杂对象内部的组成部分和装配方式,只需要知道所需建造者的类型即可
建造者模式的结构
Builder(抽象建造者):它为创建一个产品对象的各个部件指定抽象接口
public abstract class Builder
{
protected Product product = new Product();
public abstract void BuilderPartA();
public abstract void BuilderPartB();
public Product GetResult()
{
return product;
}
}
ConcreteBuilder(具体建造者):它实现了抽象建造者的接口,实现各个部分的具体构造和装配方法
public class ConcreteBuilder : Builder
{
public override void BuilderPartA()
{
product.partA = "AAA";
}
public override void BuilderPartB()
{
product.partB = "BBB";
}
}
Product(产品):被构造的复杂对象产品
public class Product
{
public string partA { get; set; }
public string partB { get; set; }
}
Director(指挥者):它负责安排复杂的对象的建造
public class Director
{
private Builder builder;
//构造注入
public Director(Builder builder)
{
this.builder = builder;
}
//方法注入
public void SetBuilder(Builder builder)
{
this.builder = builder;
}
public Product Construct()
{
builder.BuilderPartA();
builder.BuilderPartB();
return builder.GetResult();
}
}
实现:
static void Main(string[] args)
{
Builder builder = new ConcreteBuilder();
Director director = new Director(builder);
Product product = director.Construct();
Console.WriteLine($"partA={product.partA}\npartB={product.partB}");
Console.Read();
}
建造者模式的优点:
1.客户端不用知道产品内部的组成细节和创造过程
2.每个具体创建者都是相互独立,添加一个具体创建者不会影响其他的对象,符合开闭原则
3.在创建者里面分步骤的处理对象的每个细节,使得复杂对象拆分成简单步骤处理
建造者模式的缺点:
1.创建者创建的产品一般具有较多的共同点,如果产品间的差距较大,那么不太适用建造者模式
2.如果产品内部变化复杂,可能会需要定义很多具体建造者类来实现这样的变化,使得系统变得庞大且复杂化
建造者模式的适用环境:
1.需要生成的产品对象有复杂的内部结构
2.需要生成的产品对象的属性相互依赖
3.对象的创建过程独立于创建该对象的类
4.隔离复杂的对象的创建和使用,并使得相同的创建过程创建不同的产品