using System;
using System.Collections.Generic;
namespace TestCS
{
class Program
{
static void Main(string[] args)
{
Director director = new Director();
Builder builder0 = new MaseratiBuilder();
Builder builder1 = new BMWBuilder();
director.Construct(builder0);
builder0.GetVehicle().Run();
director.Construct(builder1);
builder1.GetVehicle().Run();
Console.ReadKey();
}
class Director
{
public void Construct(Builder builder)
{
builder.BuildEngine();
builder.BuildUnderpan();
}
}
abstract class Builder
{
public abstract void BuildEngine();
public abstract void BuildUnderpan();
public abstract Vehicle GetVehicle();
}
class MaseratiBuilder : Builder
{
Maserati m_Maserati = new Maserati();
public override void BuildEngine()
{
m_Maserati.CreateEngine();
}
public override void BuildUnderpan()
{
m_Maserati.CreateUnderpan();
}
public override Vehicle GetVehicle()
{
return m_Maserati;
}
}
class BMWBuilder : Builder
{
BMW m_BMW = new BMW();
public override void BuildEngine()
{
m_BMW.CreateEngine();
}
public override void BuildUnderpan()
{
m_BMW.CreateUnderpan();
}
public override Vehicle GetVehicle()
{
return m_BMW;
}
}
abstract class Vehicle
{
public abstract void CreateEngine();
public abstract void CreateUnderpan();
public abstract void Run();
}
class Maserati : Vehicle
{
public Part m_Engine;
public Part m_Underpan;
public override void CreateEngine()
{
m_Engine = new MaseratiEngine();
}
public override void CreateUnderpan()
{
m_Underpan = new MaseratiUnderpan();
}
public override void Run()
{
Console.WriteLine(string.Format("Run Maserati With Parts: {0}, {1}. ", m_Engine.GetName(), m_Underpan.GetName()));
}
}
class BMW : Vehicle
{
public Part m_Engine;
public Part m_Underpan;
public override void CreateEngine()
{
m_Engine = new BMWEngine();
}
public override void CreateUnderpan()
{
m_Underpan = new BMWUnderpan();
}
public override void Run()
{
Console.WriteLine(string.Format("Run BMW With Parts: {0}, {1}. ", m_Engine.GetName(), m_Underpan.GetName()));
}
}
abstract class Part
{
public abstract string GetName();
}
class MaseratiEngine : Part
{
public override string GetName()
{
return "Maserati Engine";
}
}
class MaseratiUnderpan : Part
{
public override string GetName()
{
return "Maserati Underpan";
}
}
class BMWEngine : Part
{
public override string GetName()
{
return "BMW Engine";
}
}
class BMWUnderpan : Part
{
public override string GetName()
{
return "BMW Underpan";
}
}
}
}
C#设计模式-建造者模式
猜你喜欢
转载自blog.csdn.net/qq_37273889/article/details/85015762
今日推荐
周排行