Tuesday, May 31, 2011

Design Pattern C# Code

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);
        }

    }
}