📄 builderrealworld.cs
字号:
using System;
using System.Windows.Forms;
using System.Collections;
//建造者模式(Builder)
//意图
// 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
//适用性
// 1.当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。
// 2.当构造过程必须允许被构造的对象有不同的表示时。
namespace DesignPattern.BuilderRealWorld
{
class BuilderRealWorld : AbstractPattern
{
public static void Run(TextBox tbInfo)
{
s_tbInfo = tbInfo;
s_tbInfo.Text = "";
// Create shop with vehicle builders
Shop shop = new Shop();
VehicleBuilder b1 = new ScooterBuilder(); //单脚滑行车
VehicleBuilder b2 = new CarBuilder(); //汽车
VehicleBuilder b3 = new MotorCycleBuilder(); //摩托车
// Construct and display vehicles
shop.Construct(b1);
b1.Vehicle.Show();
shop.Construct(b2);
b2.Vehicle.Show();
shop.Construct(b3);
b3.Vehicle.Show();
// Wait for user
////Console.Read();
}
}
// "Director"
class Shop
{
// Builder uses a complex series of steps
public void Construct(VehicleBuilder vehicleBuilder)
{
vehicleBuilder.BuildFrame();
vehicleBuilder.BuildEngine();
vehicleBuilder.BuildWheels();
vehicleBuilder.BuildDoors();
}
}
// "Builder"
abstract class VehicleBuilder
{
protected Vehicle vehicle;
// Property
public Vehicle Vehicle
{
get
{
return vehicle;
}
}
public abstract void BuildFrame();
public abstract void BuildEngine();
public abstract void BuildWheels();
public abstract void BuildDoors();
}
// "ConcreteBuilder1"
class MotorCycleBuilder : VehicleBuilder
{
public override void BuildFrame()
{
vehicle = new Vehicle("MotorCycle");
vehicle["frame"] = "MotorCycle Frame";
}
public override void BuildEngine()
{
vehicle["engine"] = "500 cc";
}
public override void BuildWheels()
{
vehicle["wheels"] = "2";
}
public override void BuildDoors()
{
vehicle["doors"] = "0";
}
}
// "ConcreteBuilder2"
class CarBuilder : VehicleBuilder
{
public override void BuildFrame()
{
vehicle = new Vehicle("Car");
vehicle["frame"] = "Car Frame";
}
public override void BuildEngine()
{
vehicle["engine"] = "2500 cc";
}
public override void BuildWheels()
{
vehicle["wheels"] = "4";
}
public override void BuildDoors()
{
vehicle["doors"] = "4";
}
}
// "ConcreteBuilder3"
class ScooterBuilder : VehicleBuilder
{
public override void BuildFrame()
{
vehicle = new Vehicle("Scooter");
vehicle["frame"] = "Scooter Frame";
}
public override void BuildEngine()
{
vehicle["engine"] = "50 cc";
}
public override void BuildWheels()
{
vehicle["wheels"] = "2";
}
public override void BuildDoors()
{
vehicle["doors"] = "0";
}
}
// "Product"
class Vehicle
{
private string type;
private Hashtable parts = new Hashtable();
// Constructor
public Vehicle(string type)
{
this.type = type;
}
// Indexer (i.e. smart array)
public object this[string key]
{
get
{
return parts[key];
}
set
{
parts[key] = value;
}
}
public void Show()
{
DesignPattern.FormMain.OutputInfo("\n---------------------------");
DesignPattern.FormMain.OutputInfo("Vehicle Type: {0}", type);
DesignPattern.FormMain.OutputInfo(" Frame : {0}", parts["frame"]);
DesignPattern.FormMain.OutputInfo(" Engine : {0}", parts["engine"]);
DesignPattern.FormMain.OutputInfo(" #Wheels: {0}", parts["wheels"]);
DesignPattern.FormMain.OutputInfo(" #Doors : {0}", parts["doors"]);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -