位置:首页 > 软件编程 > C#笔记
C# 利用Builder模式造车用法示例
日期:2023-01-04 人气:

大家好,对C# 利用Builder模式造车用法示例感兴趣的小伙伴,下面一起跟随三零脚本的小编来看看C# 利用Builder模式造车用法示例的例子吧。

Builder模式也可以造车。

对于Builder模式来说,首相要把要造的车确定下来:

/**
 * 利用Builder模式造车用法
 * @arrange (三零.脚本) www.q3060.com
 **/
public class Car
{
	public string Model { get; set; }
	public string Engine { get; set; }
	public string Transmission { get; set; }
	public string Body { get; set; }
	public int Doors { get; set; }
	public List<string>  Accessories { get; set; }
	public Car()
	{
		Accessories = new List<string>();
	}
	public void ShowCarInfo()
	{
		Console.WriteLine(Model);
		Console.WriteLine(Engine);
		Console.WriteLine(Body);
		Console.WriteLine("门的数量:" + Doors);
		Console.WriteLine(Transmission);
		Console.WriteLine("配置为:");
		foreach (var accessory in Accessories)
		{
			Console.WriteLine("\t{0}", accessory);
		}
	}
}
 

这个Car可以交给Builder1也可以交给Builder2,等等,但首先需要提炼出Builder们的一个抽象类。这个抽象Builder可以设置和获取Car,并提供生产Car各个部件的抽象方法。

public abstract class CarBuilder
{
	protected Car _car;
	public Car GetCar()
	{
		return _car;
	}
	public void SetCar()
	{
		_car = new Car();
	}
	public abstract void SetModel();
	public abstract void SetEngine();
	public abstract void SetTransmission();
	public abstract void SetBody();
	public abstract void SetDoors();
	public abstract void SetAccessories();
}

然后,就需要一个具体的Builder来派生抽象Builder。

/**
 * 利用Builder模式造车用法
 * @arrange (三零.脚本) www.q3060.com
 **/
public class BuilderOne : CarBuilder
{
	public override void SetEngine()
	{
		_car.Engine = "发动机1";
	}
	public override void SetModel()
	{
		_car.Model = "型号1";
	}
	public override void SetTransmission()
	{
		_car.Transmission = "变速1";
	}
	public override void SetBody()
	{
		_car.Body = "SUV";
	}
	public override void SetAccessories()
	{
		_car.Accessories.Add("内饰");
		_car.Accessories.Add("外饰");
	}
	public override void SetDoors()
	{
		_car.Doors = 6;
	}
}

这个抽象Builder的派生类可能有很多,所以需要一个管理这些派生Builder的类,用来决定到底选用哪个Builder来生产。

/**
 * 利用Builder模式造车用法
 * @arrange (三零.脚本) www.q3060.com
 **/
public class BuilderManager
{
	private readonly CarBuilder _carBuilder;
	public BuilderManager(CarBuilder carBuilder)
	{
		_carBuilder = carBuilder;
	}
	public void BuildCar() 
	{
		_carBuilder.SetCar();
		_carBuilder.SetModel();
		_carBuilder.SetEngine();
		_carBuilder.SetBody();
		_carBuilder.SetDoors();
		_carBuilder.SetTransmission();
		_carBuilder.SetAccessories();
	}
	public Car GetCar()
	{
		return _carBuilder.GetCar();
	}
}
在客户端,如果需要造车,就找Builder的管理类,通过它的构造函数传入具体的Builder。
/**
 * 利用Builder模式造车用法
 * @arrange (三零.脚本) www.q3060.com
 **/
class Program
{
	static void Main(string[] args)
	{
		var builderManager = new BuilderManager(new BuilderOne());
		builderManager.BuildCar();
		var car = builderManager.GetCar();
		car.ShowCarInfo();
		Console.ReadKey();
	}
}

抽象工厂和Builder模式都可以造车,但两者有也许的不同:   

抽象工厂模式相当于为车找了一个专属工厂,要求工厂只能造这种类型的车
Builder模式相当于为车找不同的工厂,不同的工厂生产出来的车型都不一样

您可能感兴趣的文章