Abstract Factory - This pattern is used to create concrete class instances without specifying the exact class type. The Abstract Factory Pattern provides a way to encapsulate a group of individual factories that have a common theme.
code here.........
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace BuilderTest
{
class Program
{
public static void Main(string[] args)
{
Director director = new Director();
Builder builder1 = new ConcreteBuilder1();
Builder builder2 = new ConcreteBuilder2();
director.Construct(builder1);
Product p1 = builder1.GetResult();
p1.Show();
director.Construct(builder2);
Product p2 = builder2.GetResult();
p2.Show();
Console.ReadKey();
}
}
abstract class Builder
{
public abstract void BuildPartA();
public abstract void BuildPartB();
public abstract Product GetResult();
}
class Director
{
public void Construct(Builder builder)
{
builder.BuildPartA();
builder.BuildPartB();
}
}
class ConcreteBuilder1 : Builder
{
private Product _product = new Product();
public override void BuildPartA()
{
_product.Add("partA");
//throw new NotImplementedException();
}
public override void BuildPartB()
{
_product.Add("partB");
//throw new NotImplementedException();
}
public override Product GetResult()
{
return _product;
//throw new NotImplementedException();
}
}
class ConcreteBuilder2 : Builder
{
private Product _product = new Product();
public override void BuildPartA()
{
_product.Add("partx");
//throw new NotImplementedException();
}
public override void BuildPartB()
{
_product.Add("partY");
// throw new NotImplementedException();
}
public override Product GetResult()
{
return _product;
// throw new NotImplementedException();
}
}
class Product
{
private List<string> _parts = new List<string>();
public void Add(string part)
{
_parts.Add(part);
}
public void Show()
{
Console.WriteLine("\nProduct Parts -");
foreach (string part in _parts)
Console.WriteLine(part);
}
}
}
code here.........
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace BuilderTest
{
class Program
{
public static void Main(string[] args)
{
Director director = new Director();
Builder builder1 = new ConcreteBuilder1();
Builder builder2 = new ConcreteBuilder2();
director.Construct(builder1);
Product p1 = builder1.GetResult();
p1.Show();
director.Construct(builder2);
Product p2 = builder2.GetResult();
p2.Show();
Console.ReadKey();
}
}
abstract class Builder
{
public abstract void BuildPartA();
public abstract void BuildPartB();
public abstract Product GetResult();
}
class Director
{
public void Construct(Builder builder)
{
builder.BuildPartA();
builder.BuildPartB();
}
}
class ConcreteBuilder1 : Builder
{
private Product _product = new Product();
public override void BuildPartA()
{
_product.Add("partA");
//throw new NotImplementedException();
}
public override void BuildPartB()
{
_product.Add("partB");
//throw new NotImplementedException();
}
public override Product GetResult()
{
return _product;
//throw new NotImplementedException();
}
}
class ConcreteBuilder2 : Builder
{
private Product _product = new Product();
public override void BuildPartA()
{
_product.Add("partx");
//throw new NotImplementedException();
}
public override void BuildPartB()
{
_product.Add("partY");
// throw new NotImplementedException();
}
public override Product GetResult()
{
return _product;
// throw new NotImplementedException();
}
}
class Product
{
private List<string> _parts = new List<string>();
public void Add(string part)
{
_parts.Add(part);
}
public void Show()
{
Console.WriteLine("\nProduct Parts -");
foreach (string part in _parts)
Console.WriteLine(part);
}
}
}