Monday, March 4, 2013

Factory Design Pattern(reference java2s )


using System;
using System.Collections;

namespace FactoryDesignPattern
{
    class Program
    {
        static void Main(string[] args)
        {
            Page p = new CatalogPage();
            p.AddMoudle();
            p.DisplayPage();
            p = new ManualPage();
            p.AddMoudle();
            p.DisplayPage();
            Console.ReadLine();
        }
    }

    public abstract  class Page
    {
        protected ArrayList pageCompositor = new ArrayList();
        public abstract void AddMoudle();
        public abstract void DisplayPage();
             
    }

    public class CatalogPage : Page
    {
        public CatalogPage() { this.AddMoudle(); }
        public override void AddMoudle()
        {
            this.pageCompositor.Clear();
            this.pageCompositor.Add(new FeatureModule());
            this.pageCompositor.Add(new PictureModule());
        }

        public override void DisplayPage()
        {
            foreach (Module item in this.pageCompositor)
                item.SomeModule();
        }
    }

    public class FeatureModule :Module
    {
        public FeatureModule() { }
        public override void SomeModule()
        {
            Console.WriteLine("Feature content.");
        }
    }

    public class PictureModule : Module
    {
        public PictureModule() { }
        public override void SomeModule()
        {
            Console.WriteLine("Picture content.");
        }
    }

    public abstract  class Module
    {
        public abstract void SomeModule();
    }

    public class ManualPage : Page
    {
        public ManualPage() { }
        public override void AddMoudle()
        {
            this.pageCompositor.Clear();
            this.pageCompositor.Add(new TechnicalModule());
            this.pageCompositor.Add(new PictureModule());
            this.pageCompositor.Add(new InstructionModule());
        }

        public override void DisplayPage()
        {
            Console.WriteLine("Manual page contents: ");
            foreach(Module c in this.pageCompositor)
                c.SomeModule();
            Console.WriteLine();
        }
    }

    public class TechnicalModule :Module
    {
        public override void SomeModule()
        {
            Console.WriteLine("Techinical content.");
        }
    }

    public class InstructionModule :Module
    {
        public override void SomeModule()
        {
            Console.WriteLine("Instruction content.");
        }
    }
}

No comments:

Post a Comment