Csharp/C Sharp/Design Patterns/Factory Pattern — различия между версиями

Материал из .Net Framework эксперт
Перейти к: навигация, поиск
м (1 версия)
 
(нет различий)

Текущая версия на 11:38, 26 мая 2010

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