using System; using System.Collections.Generic; using System.Text; namespace AbstractFactroy { /* * 应对多系列对象构建的需求变化 时 使用AbstractFactory * 对象稳定不变(不会经常修改),变的是对象的系列(风格) * “系列对象”指的是这些对象之间有相互依赖、或作用关系。 */ #region 抽象工厂 //道路 public abstract class Road { public abstract void A(); } //房屋 public abstract class Building { public abstract void B(Road road); } //地道 public abstract class Tunnel { public abstract void C(); } //树林 public abstract class Jungle { public abstract void D(Tunnel tunnel); } public abstract class FaciltiesFactroy { public abstract Road CreateRoad(); public abstract Building CreateBuilding(); public abstract Tunnel CreateTunnel(); public abstract Jungle CreateJungle(); } #endregion #region 具体的实现===(现代风格的系列)================================= //道路 public class ModernRoad:Road { public override void A() { Console.WriteLine("现代风格的Road"); } } //房屋 public class ModernBuilding:Building { public override void B(Road road) { Console.WriteLine("现代风格的Building 和 "+road.ToString());} } //地道 public class ModernTunnel:Tunnel { public override void C() { Console.WriteLine("现代风格的Tunnel");} } //树林 public class ModernJungle:Jungle { public override void D(Tunnel tunnel) { Console.WriteLine("现代风格的Jungle 和 "+tunnel.ToString()); } } //现代场景的饰面工厂 public class ModernFaciltiesFactroy : FaciltiesFactroy { public override Road CreateRoad() { return new ModernRoad(); } public override Building CreateBuilding() { return new ModernBuilding(); } public override Tunnel CreateTunnel() { return new ModernTunnel(); } public override Jungle CreateJungle() { return new ModernJungle(); } } #endregion #region 具体的实现===(古典风格的系列)================================= //道路 public class ClassicRoad : Road { public override void A() { Console.WriteLine("古典风格的Road"); } } //房屋 public class ClassicBuilding : Building { public override void B(Road road) { Console.WriteLine("古典风格的Building 和 " + road.ToString()); } } //地道 public class ClassicTunnel : Tunnel { public override void C() { Console.WriteLine("古典风格的Tunnel"); } } //树林 public class ClassicJungle : Jungle { public override void D(Tunnel tunnel) { Console.WriteLine("古典风格的Jungle 和 " + tunnel.ToString()); } } //古典场景的饰面工厂 public class ClassicFaciltiesFactroy : FaciltiesFactroy { public override Road CreateRoad() { return new ClassicRoad(); } public override Building CreateBuilding() { return new ClassicBuilding(); } public override Tunnel CreateTunnel() { return new ClassicTunnel(); } public override Jungle CreateJungle() { return new ClassicJungle(); } } #endregion //Client====客户程序============================================= class GameManager { FaciltiesFactroy faciltiesFactroy; Road road; Building building; Tunnel tunnel; Jungle jungle; public GameManager(FaciltiesFactroy faciltiesFactroy) { this.faciltiesFactroy = faciltiesFactroy; } public void BuildGameFacilties() { road = faciltiesFactroy.CreateRoad(); building = faciltiesFactroy.CreateBuilding(); tunnel = faciltiesFactroy.CreateTunnel(); jungle = faciltiesFactroy.CreateJungle(); } public void Run() { road.A(); building.B(road); tunnel.C(); jungle.D(tunnel); } } class app { static void Main() { //创建现代饰面 GameManager g = new GameManager(new ModernFaciltiesFactroy()); g.BuildGameFacilties(); g.Run(); //创建古典饰面 GameManager f = new GameManager(new ClassicFaciltiesFactroy()); f.BuildGameFacilties(); f.Run(); Console.ReadLine(); } } }