using System; public class AComputer: Computer { public override void ComputerBrand() { Console.WriteLine ("A Computer."); } public AComputer(){;} } public class AComputerDesk: ComputerDesk { public override void ComputerDeskBrand() { Console.WriteLine("A Computer cap."); } public AComputerDesk(){;} } public class AComputerFactory: ComputerFactory { public override Computer BuildComputer() { Computer rad = new AComputer(); rad.ComputerBrand(); return rad; } public override ComputerDesk BuildComputerDesk() { ComputerDesk cap = new AComputerDesk(); cap.ComputerDeskBrand(); return cap; } public AComputerFactory(){;} } public class BComputer:Computer { public override void ComputerBrand() { Console.WriteLine ("B Computer."); } public BComputer(){;} } public class BComputerDesk: ComputerDesk { public override void ComputerDeskBrand() { Console.WriteLine("B Computer cap."); } public BComputerDesk(){;} } public class BComputerFactory: ComputerFactory { public override Computer BuildComputer() { Computer rad = new BComputer(); rad.ComputerBrand(); return rad; } public override ComputerDesk BuildComputerDesk() { ComputerDesk cap = new BComputerDesk(); cap.ComputerDeskBrand(); return cap; } public BComputerFactory(){;} } public class CComputer: Computer { public override void ComputerBrand() { Console.WriteLine ("C Computer."); } public CComputer() {;} } public class CComputerDesk: ComputerDesk { public override void ComputerDeskBrand() { Console.WriteLine("C Computer cap."); } public CComputerDesk(){;} } public class CComputerFactory : ComputerFactory { public override Computer BuildComputer() { Computer rad = new CComputer(); rad.ComputerBrand(); return rad; } public override ComputerDesk BuildComputerDesk() { ComputerDesk cap = new CComputerDesk(); cap.ComputerDeskBrand(); return cap; } public CComputerFactory(){;} } public abstract class Computer { public abstract void ComputerBrand(); } public abstract class ComputerDesk { public abstract void ComputerDeskBrand(); } public abstract class ComputerFactory { public abstract Computer BuildComputer(); public abstract ComputerDesk BuildComputerDesk(); } public class WorkOrder { public void AssembleComputer(ComputerFactory fact) { Computer rad = fact.BuildComputer(); ComputerDesk cap = fact.BuildComputerDesk(); this.Assemble(); } private void Assemble() { Console.WriteLine ("Assembling Computer and cap."); Console.WriteLine(); } public WorkOrder(){;} } class Client { static void Main(string[] args) { ComputerFactory factoryOne = new AComputerFactory(); WorkOrder workOne = new WorkOrder(); workOne.AssembleComputer(factoryOne); ComputerFactory factoryTwo = new BComputerFactory(); WorkOrder workTwo = new WorkOrder(); workTwo.AssembleComputer(factoryTwo); ComputerFactory factoryThree = new CComputerFactory(); WorkOrder workThree = new WorkOrder(); workThree.AssembleComputer(factoryThree); } }