Builder(建造者)模式

建造者模式可以将一个产品的内部表象产品的生成过程分割开来,从而可以使一个建造过程生成具有不同的内部表象的产品对象。

Director:担任这个角色的类调用具体建造者角色以创建产品对象。

Builder:给出一个抽象接口,以规范产品对象的各个组成成分的建造。如汽车由车轮、方向盘、车厢等等组成。

     public void BuildPart()方法给与其子类去实现,就是由子类去创建车轮、方向盘、车厢等等。

ConcreteBuilder:用于实例化操作的子类,继承自Builder。

    public void BuildPart()实例化各个部件

    public Product GetResult()返回结果

Product:对象。车轮、方向盘、车厢

using System;
 using System.Collections;
 
 // "Director"
 class Shop
  {
   // Methods
   public void Construct( VehicleBuilder vehicleBuilder )
    {
     vehicleBuilder.BuildFrame();
     vehicleBuilder.BuildEngine();
     vehicleBuilder.BuildWheels();
     vehicleBuilder.BuildDoors();
   }
 }
 
 // "Builder"
 abstract class VehicleBuilder
  {
   // Fields
   protected Vehicle vehicle;
 
   // Properties
   public Vehicle Vehicle
    {
      get{ return vehicle; }
   }
 
   // Methods
   abstract public void BuildFrame();
   abstract public void BuildEngine();
   abstract public void BuildWheels();
   abstract public void BuildDoors();
 }
 
 // "ConcreteBuilder1"
 class MotorCycleBuilder : VehicleBuilder
  {
   // Methods
   override public void BuildFrame()
    {
     vehicle = new Vehicle( "MotorCycle" );
     vehicle[ "frame" ] = "MotorCycle Frame";
   }
 
   override public void BuildEngine()
    {
     vehicle[ "engine" ] = "500 cc";
   }
 
   override public void BuildWheels()
    {
     vehicle[ "wheels" ] = "2";
   }
 
   override public void BuildDoors()
    {
     vehicle[ "doors" ] = "0";
   }
 }
 
 // "ConcreteBuilder2"
 class CarBuilder : VehicleBuilder
  {
   // Methods
   override public void BuildFrame()
    {
     vehicle = new Vehicle( "Car" );
     vehicle[ "frame" ] = "Car Frame";
   }
 
   override public void BuildEngine()
    {
     vehicle[ "engine" ] = "2500 cc";
   }
 
   override public void BuildWheels()
    {
     vehicle[ "wheels" ] = "4";
   }
 
   override public void BuildDoors()
    {
     vehicle[ "doors" ] = "4";
   }
 }
 
 // "ConcreteBuilder3"
 class ScooterBuilder : VehicleBuilder
  {
   // Methods
   override public void BuildFrame()
    {
     vehicle = new Vehicle( "Scooter" );
     vehicle[ "frame" ] = "Scooter Frame";
   }
 
   override public void BuildEngine()
    {
     vehicle[ "engine" ] = "none";
   }
 
   override public void BuildWheels()
    {
     vehicle[ "wheels" ] = "2";
   }
 
   override public void BuildDoors()
    {
     vehicle[ "doors" ] = "0";
   }
 }
 
 // "Product"
 class Vehicle
  {
   // Fields
   private string type;
   private Hashtable parts = new Hashtable();
 
   // Constructors
   public Vehicle( string type )
    {
     this.type = type;
   }
 
   // Indexers
   public object this[ string key ]
    {
      get{ return parts[ key ]; }
      set{ parts[ key ] = value; }
   }
 
   // Methods
   public void Show()
    {
     Console.WriteLine( " ---------------------------");
     Console.WriteLine( "Vehicle Type: "+ type );
     Console.WriteLine( " Frame : " + parts[ "frame" ] );
     Console.WriteLine( " Engine : "+ parts[ "engine"] );
     Console.WriteLine( " #Wheels: "+ parts[ "wheels"] );
     Console.WriteLine( " #Doors : "+ parts[ "doors" ] );
   }
 }
 
  /// <summary>
 /// BuilderApp test
 /// </summary>
 public class BuilderApp
  {
   public static void Main( string[] args )
    {
     // Create shop and 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();
   }
 }

 

using System;
using System.Collections;

// "Director"
class Shop
{
  
// Methods
  public void Construct( VehicleBuilder vehicleBuilder )
  
{
    vehicleBuilder.BuildFrame();
    vehicleBuilder.BuildEngine();
    vehicleBuilder.BuildWheels();
    vehicleBuilder.BuildDoors();
  }
}

// "Builder"
abstract class VehicleBuilder
{
  
// Fields
  protected Vehicle vehicle;

  
// Properties
  public Vehicle Vehicle
  
{
    
getreturn vehicle; }
  }

  
// Methods
  abstract public void BuildFrame();
  
abstract public void BuildEngine();
  
abstract public void BuildWheels();
  
abstract public void BuildDoors();
}

// "ConcreteBuilder1"
class MotorCycleBuilder : VehicleBuilder
{
  
// Methods
  override public void BuildFrame()
  
{
    vehicle = 
new Vehicle( "MotorCycle" );
    vehicle[ "frame" ] = "MotorCycle Frame";
  }

  
override public void BuildEngine()
  
{
    vehicle[ "engine" ] = "500 cc";
  }

  
override public void BuildWheels()
  
{
    vehicle[ "wheels" ] = "2";
  }

  
override public void BuildDoors()
  
{
    vehicle[ "doors" ] = "0";
  }
}

// "ConcreteBuilder2"
class CarBuilder : VehicleBuilder
{
  
// Methods
  override public void BuildFrame()
  
{
    vehicle = 
new Vehicle( "Car" );
    vehicle[ "frame" ] = "Car Frame";
  }

  
override public void BuildEngine()
  
{
    vehicle[ "engine" ] = "2500 cc";
  }

  
override public void BuildWheels()
  
{
    vehicle[ "wheels" ] = "4";
  }

  
override public void BuildDoors()
  
{
    vehicle[ "doors" ] = "4";
  }
}

// "ConcreteBuilder3"
class ScooterBuilder : VehicleBuilder
{
  
// Methods
  override public void BuildFrame()
  
{
    vehicle = 
new Vehicle( "Scooter" );
    vehicle[ "frame" ] = "Scooter Frame";
  }

  
override public void BuildEngine()
  
{
    vehicle[ "engine" ] = "none";
  }

  
override public void BuildWheels()
  
{
    vehicle[ "wheels" ] = "2";
  }

  
override public void BuildDoors()
  
{
    vehicle[ "doors" ] = "0";
  }
}

// "Product"
class Vehicle
{
  
// Fields
  private string type;
  
private Hashtable parts = new Hashtable();

  
// Constructors
  public Vehicle( string type )
  
{
    
this.type = type;
  }

  
// Indexers
  public object thisstring key ]
  
{
    
getreturn parts[ key ]; }
    
set{ parts[ key ] = value; }
  }

  
// Methods
  public void Show()
  
{
    Console.WriteLine( " ---------------------------");
    Console.WriteLine( "Vehicle Type: "+ type );
    Console.WriteLine( " Frame : " + parts[ "frame" ] );
    Console.WriteLine( " Engine : "+ parts[ "engine"] );
    Console.WriteLine( " #Wheels: "+ parts[ "wheels"] );
    Console.WriteLine( " #Doors : "+ parts[ "doors" ] );
  }
}

/**//// <summary>
/// BuilderApp test
/// </summary>
public class BuilderApp
{
  
public static void Main( string[] args )
  
{
    
// Create shop and 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();
  }
}

转载于:https://www.cnblogs.com/Tim_Liu/archive/2010/09/27/1836973.html

python023基于Python旅游景点推荐系统带vue前后端分离毕业源码案例设计 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
JSP基于SSM网上医院预约挂号系统毕业源码案例设计 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值