Материал из .Net Framework эксперт
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();
}
}