Csharp/C Sharp/Design Patterns/Factory Pattern

Материал из .Net Framework эксперт
Версия от 11:38, 26 мая 2010; Admin (обсуждение | вклад) (1 версия)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

Factory Method Pattern

 
using System;
using System.Collections;
public abstract class Module {
    public abstract void SomeModule();
}
public class FeaturesModule : Module {
    public override void SomeModule() {
        Console.WriteLine("Technical content.");
    }
    public FeaturesModule() {}
}
public class InstructionModule : Module {
    public override void SomeModule() {
        Console.WriteLine("Instruction content.");
    }
    public InstructionModule() {}
}
public class PictureModule : Module {
    public override void SomeModule() {
        Console.WriteLine("Picture content.");
    }
    public PictureModule() {}
}

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

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

public class CatalogPage : Page {
    public override void AddModule() {
        this.pageCompositor.Clear();
        this.pageCompositor.Add(new FeaturesModule());
        this.pageCompositor.Add(new PictureModule());
    }
    public override void DisplayPage() {
        foreach (Module c in this.pageCompositor)
            c.SomeModule();
    }

    public CatalogPage() {
        this.AddModule();
    }
}

public class ManualPage : Page {
    public override void AddModule() {
        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 contains:");
        foreach (Module c in this.pageCompositor)
            c.SomeModule();
        Console.WriteLine();
    }
    public ManualPage() { }
}
class Client {
    static void Main(string[] args) {
        Page p = new CatalogPage();
        p.AddModule();
        p.DisplayPage();
        p = new ManualPage();
        p.AddModule();
        p.DisplayPage();
    }
}