生成器模式的目的是: 分步骤构建一个复杂的对象,把构造过程从对象的表示中分离出来。
实例代码:
//定义个交通工具类
class Vehicle
{
private string _type;
private Hashtable _parts = new Hashtable();
public Vehicle(string type)
{
this._type = type;
}
//索引
public object this[string key]
{
get { return this._parts[key]; }
set { this._parts[key] = value; }
}
public void Show()
{
Console.WriteLine("---------------------------");
Console.WriteLine("名称: {0}", this._type);
Console.WriteLine("形状: {0}", this._parts["frame"]);
Console.WriteLine("发动机: {0}", this._parts["engine"]);
Console.WriteLine("轮胎数: {0}", this._parts["wheels"]);
Console.WriteLine("车门数: {0}\n", this._parts["doors"]);
}
}
//生成交通工具的基类
abstract class VehicleBuilder
{
protected Vehicle vehicle;
public Vehicle Vehicle
{
get { return vehicle; }
}
public abstract void BuildFrame(); //形状
public abstract void BuildEngine(); //发动机
public abstract void BuildWheels(); //轮胎数
public abstract void BuildDoors(); //车门数
}
//生成摩托车
class MotorCycleBuilder : VehicleBuilder
{
public override void BuildFrame()
{
vehicle = new Vehicle("摩托车");
vehicle["frame"] = "摩托车形状";
}
public override void BuildEngine()
{
vehicle["engine"] = "800CC";
}
public override void BuildWheels()
{
vehicle["wheels"] = "2个";
}
public override void BuildDoors()
{
vehicle["doors"] = "N/A";
}
}
//生成小汽车
class CarBuilder : VehicleBuilder
{
public override void BuildFrame()
{
vehicle = new Vehicle("法拉利");
vehicle["frame"] = "跑车形状";
}
public override void BuildEngine()
{
vehicle["engine"] = "4000CC";
}
public override void BuildWheels()
{
vehicle["wheels"] = "4个";
}
public override void BuildDoors()
{
vehicle["doors"] = "2门";
}
}
//生成单车
class ScooterBuilder : VehicleBuilder
{
public override void BuildFrame()
{
vehicle = new Vehicle("单车");
vehicle["frame"] = "自行车形状";
}
public override void BuildEngine()
{
vehicle["engine"] = "0CC";
}
public override void BuildWheels()
{
vehicle["wheels"] = "2个";
}
public override void BuildDoors()
{
vehicle["doors"] = "N/A";
}
}
//定购类
class Shop
{
public void Construct(VehicleBuilder vehicleBuilder) //生成步骤
{
vehicleBuilder.BuildFrame(); //生成车的形状
vehicleBuilder.BuildEngine(); //安装发动机
vehicleBuilder.BuildWheels(); //安装轮胎
vehicleBuilder.BuildDoors(); //安装车门
}
}
//测试
public class MainApp
{
public static void Main()
{
Shop shop = new Shop();
VehicleBuilder b1 = new ScooterBuilder();
VehicleBuilder b2 = new CarBuilder();
VehicleBuilder b3 = new MotorCycleBuilder();
shop.Construct(b1); //定购一辆Scooter
b1.Vehicle.Show();
shop.Construct(b2); //定购一辆Car
b2.Vehicle.Show();
shop.Construct(b3); //定购一辆MotorCycle
b3.Vehicle.Show();
Console.Read();
}
}
实例代码:
//定义个交通工具类
class Vehicle
{
private string _type;
private Hashtable _parts = new Hashtable();
public Vehicle(string type)
{
this._type = type;
}
//索引
public object this[string key]
{
get { return this._parts[key]; }
set { this._parts[key] = value; }
}
public void Show()
{
Console.WriteLine("---------------------------");
Console.WriteLine("名称: {0}", this._type);
Console.WriteLine("形状: {0}", this._parts["frame"]);
Console.WriteLine("发动机: {0}", this._parts["engine"]);
Console.WriteLine("轮胎数: {0}", this._parts["wheels"]);
Console.WriteLine("车门数: {0}\n", this._parts["doors"]);
}
}
//生成交通工具的基类
abstract class VehicleBuilder
{
protected Vehicle vehicle;
public Vehicle Vehicle
{
get { return vehicle; }
}
public abstract void BuildFrame(); //形状
public abstract void BuildEngine(); //发动机
public abstract void BuildWheels(); //轮胎数
public abstract void BuildDoors(); //车门数
}
//生成摩托车
class MotorCycleBuilder : VehicleBuilder
{
public override void BuildFrame()
{
vehicle = new Vehicle("摩托车");
vehicle["frame"] = "摩托车形状";
}
public override void BuildEngine()
{
vehicle["engine"] = "800CC";
}
public override void BuildWheels()
{
vehicle["wheels"] = "2个";
}
public override void BuildDoors()
{
vehicle["doors"] = "N/A";
}
}
//生成小汽车
class CarBuilder : VehicleBuilder
{
public override void BuildFrame()
{
vehicle = new Vehicle("法拉利");
vehicle["frame"] = "跑车形状";
}
public override void BuildEngine()
{
vehicle["engine"] = "4000CC";
}
public override void BuildWheels()
{
vehicle["wheels"] = "4个";
}
public override void BuildDoors()
{
vehicle["doors"] = "2门";
}
}
//生成单车
class ScooterBuilder : VehicleBuilder
{
public override void BuildFrame()
{
vehicle = new Vehicle("单车");
vehicle["frame"] = "自行车形状";
}
public override void BuildEngine()
{
vehicle["engine"] = "0CC";
}
public override void BuildWheels()
{
vehicle["wheels"] = "2个";
}
public override void BuildDoors()
{
vehicle["doors"] = "N/A";
}
}
//定购类
class Shop
{
public void Construct(VehicleBuilder vehicleBuilder) //生成步骤
{
vehicleBuilder.BuildFrame(); //生成车的形状
vehicleBuilder.BuildEngine(); //安装发动机
vehicleBuilder.BuildWheels(); //安装轮胎
vehicleBuilder.BuildDoors(); //安装车门
}
}
//测试
public class MainApp
{
public static void Main()
{
Shop shop = new Shop();
VehicleBuilder b1 = new ScooterBuilder();
VehicleBuilder b2 = new CarBuilder();
VehicleBuilder b3 = new MotorCycleBuilder();
shop.Construct(b1); //定购一辆Scooter
b1.Vehicle.Show();
shop.Construct(b2); //定购一辆Car
b2.Vehicle.Show();
shop.Construct(b3); //定购一辆MotorCycle
b3.Vehicle.Show();
Console.Read();
}
}


浙公网安备 33010602011771号