首页 > 代码库 > 建造者模式
建造者模式
设计模式之建造者设计模式(也叫生成器模式)
建造者模式就是将一个复杂对象的构建与他的表示分离,使得同样的构建过程可以创建不同的表示
1:使用建造者模式的话,它封装了一个产品的构造过程,并且允许按照预定的步骤构造产品。同时,向客户端隐藏了产品的内部表现
2:一般产品类和建造者类是比较稳定的,因此,将主要的业务逻辑封装在导演类中对整体而言可以取得比较好的稳定性。 其次,建造者模式很容易进行扩展。如果有新的需求,通过实现一个新的建造者类就可以完成,基本上不用修改之前已经测试通过的代码,因此也就不会对原有功能引入风险
建造者模式与工厂模式的区别
1:工厂模式是将对象的全部创建过程封装在工厂类中,由工厂类向客户端提供最终的产品;而建造者模式中,建造者类一般只提供产品类中各个组件的建造,而将具体建造过程交付给导演类。由导演类负责将各个组件按照特定的规则组建为产品,然后将组建好的产品交付给客户端
总结
建造者模式与工厂模式类似,他们都是建造者模式,适用的场景也很相似。一般来说,如果产品的建造很复杂,那么请用工厂模式;如果产品的建造更复杂,那么请用建造者模式
建造者模式:
1:Buider是一个抽象接口,是各个零件制定的抽象接口
2: ConcreteBuilder:是实现Buider接口的具体的类,构建和装配各个零件,达到我们想要的组件
3:Director:构建一个使用Builder接口的对象,明确产品的执行步骤,按照自己的顺序执行,不和Product直接接触,
4:Product:具体的产品
代码实例:
1:定义一个Builder接口
public abstract class AbstractBuilder
{
//构建产品的 A 部件
public abstract void BuilderPartA();
//构建产品的 B 部件
public abstract void BuilderPartB();
//返回构建好的产品
public abstract Product GetResult();
}
2:定义一个产品(product
private IList<string> parts = new List<string>();
public void AddPart(string part)
{
parts.Add(part);
}
public void ShowProduct()
{
foreach (string str in parts)
{
Console.WriteLine(str);
}
}
}
3:具体的建造者类 ConcreteBuilderA 和ConcreteBuilderB
public class ConcreteBuilderA implements AbstractBuilder
private Product product = new Product();
public override void BuilderPartA()
{
product.AddPart("具体类 A 的组件 A");
}
public override void BuilderPartB()
{
product.AddPart("具体类 A 的组件 B");
}
public override Product GetResult()
{
return product;
}
}
public class ConcreteBuilderB implements AbstractBuilder
private Product product = new Product();
public override void BuilderPartA()
{
product.AddPart("具体类 A 的组件 A");
}
public override void BuilderPartB()
{
product.AddPart("具体类 A 的组件 B");
}
public override Product GetResult()
{
return product;
}
}
4:创建一个指挥者Director
namespace Builder
{
public class Director
{
//通过指挥者的 Construct 来按照规定的顺序组装产品
public void Construct(AbstractBuilder builder)
{
//先组装 A 部件
builder.BuilderPartA();
//在组装 B 部件
builder.BuilderPartB();
}
}
}
5:客户端代码
客户端代码:
public class BuilderTest
{
static void Main(string[] args)
{
//定义一个组装产品的指挥者
Director director = new Director();
Console.WriteLine("产品 A:");
//指挥组装产品 A
AbstractBuilder builderA = new ConcreteBuilderA();
director.Construct(builderA);
builderA.GetResult().ShowProduct();
//指挥组装产品 B
Console.WriteLine("\n产品 B:");
AbstractBuilder builderB = new ConcreteBuilderB();
director.Construct(builderB);
builderB.GetResult().ShowProduct();
Console.Read();
}
}
建造者模式