Csharp/C Sharp/Design Patterns/Factory Pattern
Factory Method Pattern
<source lang="csharp"> 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(); }
}
</source>