建造者(Builder)模式:将一个复杂对象拆解成多个相对简单的部分,根据不同需要分别实现它们,
最后组成该复杂对象。
建造者模式和抽象工厂方法区别在于,前者核心是将一个复杂的对象拆解成一个小的部分然后由所有整体
组成一个复杂的对象提供给调用者。
而后者并没有拆的概念,将各个分部组合起来的不是一个单独存在的对象。
复制代码
using System;
namespace BuilderModel
{
// 你要装修一个家
public class House { }
// 装修一个新家大致步骤
public abstract class Builder
{
public abstract void BuildDoor();
public abstract void BuildWall();
public abstract void BuildWindow();
public abstract void BuildFloor();
public abstract void BuildCelling();
public abstract House getHouse();
}
// 包工头
public class Director {
public void Construct(Builder builder) {
builder.BuildCelling();
builder.BuildWall();
builder.BuildWindow();
builder.BuildDoor();
builder.BuildFloor();
}
}
// 中式风格
public class CNStyle : Builder
{
private House cnHouse = new House();
private string style = "中式";
public override void BuildCelling()
{
Console.WriteLine(style+"集成吊顶");
}
public override void BuildDoor()
{
Console.WriteLine(style + "烤漆门");
}
public override void BuildFloor()
{
Console.WriteLine(style + "大理石地板");
}
public override void BuildWall()
{
Console.WriteLine(style + "乳胶漆大白");
}
public override void BuildWindow()
{
Console.WriteLine(style + "防盗窗");
}
public override House getHouse()
{
return cnHouse;
}
}
// 欧式风格
public class EUStyle : Builder
{
private House euHouse = new House();
private string style = "欧式";
public override void BuildCelling()
{
Console.WriteLine(style + "集成吊顶");
}
public override void BuildDoor()
{
Console.WriteLine(style + "烤漆门");
}
public override void BuildFloor()
{
Console.WriteLine(style + "大理石地板");
}
public override void BuildWall()
{
Console.WriteLine(style + "乳胶漆大白");
}
public override void BuildWindow()
{
Console.WriteLine(style + "防盗窗");
}
public override House getHouse()
{
return euHouse;
}
}
public class Test {
static void Main(string[] args){
Builder cn = new CNStyle();
Builder eu = new EUStyle();
Director pd = new Director();
pd.Construct(eu);// 告诉包工头你选哪种风格
}
}
}
复制代码
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END