Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- namespace DoFactory.GangOfFour.Abstract.RealWorld
- {
- /// <summary>
- /// MainApp startup class for Real-World
- /// Abstract Factory Design Pattern.
- /// </summary>
- class MainApp
- {
- /// <summary>
- /// Entry point into console application.
- /// </summary>
- public static void Main()
- {
- // Create and run the African animal world
- ContinentFactory africa = new AfricaFactory();
- AnimalWorld world = new AnimalWorld(africa);
- world.RunFoodChain();
- // Create and run the American animal world
- ContinentFactory america = new AmericaFactory();
- world = new AnimalWorld(america);
- world.RunFoodChain();
- // Wait for user input
- Console.ReadKey();
- }
- }
- /// <summary>
- /// The 'AbstractFactory' abstract class
- /// </summary>
- abstract class ContinentFactory
- {
- public abstract Herbivore CreateHerbivore();
- public abstract Carnivore CreateCarnivore();
- }
- /// <summary>
- /// The 'ConcreteFactory1' class
- /// </summary>
- class AfricaFactory : ContinentFactory
- {
- public override Herbivore CreateHerbivore()
- {
- return new Wildebeest();
- }
- public override Carnivore CreateCarnivore()
- {
- return new Lion();
- }
- }
- /// <summary>
- /// The 'ConcreteFactory2' class
- /// </summary>
- class AmericaFactory : ContinentFactory
- {
- public override Herbivore CreateHerbivore()
- {
- return new Bison();
- }
- public override Carnivore CreateCarnivore()
- {
- return new Wolf();
- }
- }
- /// <summary>
- /// The 'AbstractProductA' abstract class
- /// </summary>
- abstract class Herbivore
- {
- }
- /// <summary>
- /// The 'AbstractProductB' abstract class
- /// </summary>
- abstract class Carnivore
- {
- public abstract void Eat(Herbivore h);
- }
- /// <summary>
- /// The 'ProductA1' class
- /// </summary>
- class Wildebeest : Herbivore
- {
- }
- /// <summary>
- /// The 'ProductB1' class
- /// </summary>
- class Lion : Carnivore
- {
- public override void Eat(Herbivore h)
- {
- // Eat Wildebeest
- Console.WriteLine(this.GetType().Name +
- " eats " + h.GetType().Name);
- }
- }
- /// <summary>
- /// The 'ProductA2' class
- /// </summary>
- class Bison : Herbivore
- {
- }
- /// <summary>
- /// The 'ProductB2' class
- /// </summary>
- class Wolf : Carnivore
- {
- public override void Eat(Herbivore h)
- {
- // Eat Bison
- Console.WriteLine(this.GetType().Name +
- " eats " + h.GetType().Name);
- }
- }
- /// <summary>
- /// The 'Client' class
- /// </summary>
- class AnimalWorld
- {
- private Herbivore _herbivore;
- private Carnivore _carnivore;
- // Constructor
- public AnimalWorld(ContinentFactory factory)
- {
- _carnivore = factory.CreateCarnivore();
- _herbivore = factory.CreateHerbivore();
- }
- public void RunFoodChain()
- {
- _carnivore.Eat(_herbivore);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement