Object Oriented Programming Patterns for Geeks
The Builder Pattern
I must admit that I am not the biggest fan of this pattern when used in isolation.
namespace ooppatterns
{
using System;
using System.Collections.Generic;
internal class Program
{
private static void Main( string[] args )
{
Machine mnfctr = new Machine();
IBuilder b1 = new ProductABCBuilder();
mnfctr.Construct( b1 );
Product p1 = b1.FinishedProduct;
p1.Parts();
IBuilder b2 = new ProductXYZBuilder();
mnfctr.Construct( b2 );
Product p2 = b2.FinishedProduct;
p2.Parts();
Console.ReadLine();
}
}
class Machine
{
public void Construct( IBuilder builder )
{
builder.BuildPart1();
builder.BuildPart2();
builder.BuildPart3();
}
}
interface IBuilder
{
void BuildPart1();
void BuildPart2();
void BuildPart3();
Product FinishedProduct { get; }
}
class ProductABCBuilder : IBuilder
{
private Product product = new Product();
public void BuildPart1()
{
product.Add( "PartA" );
}
public void BuildPart2()
{
product.Add( "PartB" );
}
public void BuildPart3()
{
product.Add( "PartC" );
}
public Product FinishedProduct
{
get { return product; }
}
}
class ProductXYZBuilder : IBuilder
{
private Product product = new Product();
public void BuildPart1()
{
product.Add( "PartX" );
}
public void BuildPart2()
{
product.Add( "PartY" );
}
public void BuildPart3()
{
product.Add( "PartZ" );
}
public Product FinishedProduct
{
get { return product; }
}
}
class Product
{
private List<string> _parts = new List<string>();
public void Add( string part )
{
this._parts.Add( part );
}
public void Parts()
{
Console.WriteLine( "Product is made of:" );
foreach ( string part in this._parts )
Console.WriteLine( part );
}
}
}