您的位置:首页 > 编程语言 > C#

C#设计模式-建造者模式

2018-12-15 16:59 148 查看
[code]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";
}
}
}
}

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: