泡泡

              宠辱不惊-闲看庭前花开花落
                           去留无意-漫观天外云展云舒
  首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

03)Builder

Posted on 2007-09-15 14:33  AlanPaoPao  阅读(145)  评论(0)    收藏  举报
    生成器模式的目的是: 分步骤构建一个复杂的对象,把构造过程从对象的表示中分离出来。
    实例代码:
//定义个交通工具类
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();
  }

}