这里给大家分享一个学习设计模式好的网站:https://refactoring.guru/
然后进入正题,来说说建造者设计模式。举一个例子:房屋是由门,窗户,地板等等组成的。如果我们将房屋House设计成一个类,那么他里面就包含了门,窗户,地板等等对象。若此时客户需要new出一个House对象,那么需要在构造函数中传递至少三个参数。我说的是至少,实际上不止。假如需要传递10个参数才能构建出一个House对象,那么客户在调用的时候会非常的麻烦,而且客户必须清楚的知道我们房屋是什么构成的。由此产生了我们的建造者模式,下面来贴上代码。
//产品角色 House
public class Product
{
public string partA;
public string partB;
public string partC;
public void SetPartA(string nPartA)
{
this.partA = nPartA;
}
public void SetPartB(string nPartB)
{
this.partB = nPartB;
}
public void SetPartC(string nPartC)
{
this.partC = nPartC;
}
public void Show()
{
Console.WriteLine(partA);
Console.WriteLine(partB);
Console.WriteLine(partC);
}
}
//抽象建造者,也可以做成接口
public abstract class Builder
{
public Product product = new Product();
public abstract void builderPartA();
public abstract void builderPartB();
public abstract void builderPartC();
public Product GetProduct()
{
return product;
}
}
//具体建造者
public class ConcreteBuilderA : Builder
{
public override void builderPartA()
{
product.SetPartA("AAA");
}
public override void builderPartB()
{
product.SetPartB("BBB");
}
public override void builderPartC()
{
product.SetPartC("CCC");
}
}
//具体建造者
public class ConcreteBuilderB : Builder
{
public override void builderPartA()
{
product.SetPartA("aaa");
}
public override void builderPartB()
{
product.SetPartB("bbb");
}
public override void builderPartC()
{
product.SetPartC("ccc");
}
}
//指挥者 调用建造者中的方法完成复杂对象的创建。
public class Director
{
private Builder builder;
public Director(Builder builder)
{
this.builder = builder;
}
public Product Construct()
{
this.builder.builderPartA();
this.builder.builderPartB();
this.builder.builderPartC();
return builder.GetProduct();
}
}
客户调用:
Builder builder = new ConcreteBuilderB();
Director director = new Director(builder);
Product product = director.Construct();
product.Show();