实例中使用的各种元素类型的定义 ClsFacilities.cs namespace 设计模式_Abstract_Factory抽象工厂模式 { //①首先是一系列的抽象类 //道路类 public abstract class Road { public abstract void DisplayRoad(); } //建筑类 public abstract class Building { public abstract void DisplayBuilding(); } //管道类 public abstract class Tunnel { public abstract void DisplayTunnel(); } //丛林类 public abstract class Jungle { public abstract void DisplayJungle(); } //创建不同风格的元素 //=======================Modern风格(现代风格)====================== public class ModernRoad : Road { public override void DisplayRoad() { Console.WriteLine("ModernRoad"); } } public class ModernBuilding : Building { public override void DisplayBuilding() { Console.WriteLine("ModernBuilding"); } } public class ModernTunnel : Tunnel { public override void DisplayTunnel() { Console.WriteLine("ModernTunnel"); } } public class ModernJungle : Jungle { public override void DisplayJungle() { Console.WriteLine("ModernJungle"); } } //=======================Classic风格(古典风格)====================== public class ClassicRoad : Road { public override void DisplayRoad() { Console.WriteLine("ClassicRoad"); } } public class ClassicBuilding : Building { public override void DisplayBuilding() { Console.WriteLine("ClassicBuilding"); } } public class ClassicTunnel : Tunnel { public override void DisplayTunnel() { Console.WriteLine("ClassicTunnel"); } } public class ClassicJungle : Jungle { public override void DisplayJungle() { Console.WriteLine("ClassicJungle"); } } } 用于创建元素的工厂类 namespace 设计模式_Abstract_Factory抽象工厂模式 { //②创建元素的抽象工厂 abstract class FacilitiesFactory { public abstract Road CreateRoad(); public abstract Building CreateBuilding(); public abstract Tunnel CreateTunnel(); public abstract Jungle CreateJungle(); } //Modern风格工厂 class ModernFacilitiesFactory : FacilitiesFactory { 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(); } } //Classic风格工厂 class ClassicFacilitiesFactory : FacilitiesFactory { 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(); } } } 客户程序,即使用 namespace 设计模式_Abstract_Factory抽象工厂模式 { //③创建客户代码 /* * ※※※※※ * 创建抽象工厂的结果就是该GameManager类的内部不需要在发生变化, * GameManager类的内部会相对稳定下来 */ class GameManager { FacilitiesFactory facilitiesFactory; Road road; Building building; Tunnel tunnel; Jungle jungle; public GameManager(FacilitiesFactory facilitiesFactory) { this.facilitiesFactory = facilitiesFactory; } //用来创建各种元素 public void BuildGameFacilities() { road = facilitiesFactory.CreateRoad(); building = facilitiesFactory.CreateBuilding(); tunnel = facilitiesFactory.CreateTunnel(); jungle = facilitiesFactory.CreateJungle(); } //使用创建的实例,该方法为演示用 public void play() { road.DisplayRoad(); building.DisplayBuilding(); tunnel.DisplayTunnel(); jungle.DisplayJungle(); } } //④,使用GameManager class Program { static void Main(string[] args) { //创建现代风格 GameManager manager = new GameManager(new ModernFacilitiesFactory()); manager.BuildGameFacilities(); manager.play(); //创建古典风格 manager = new GameManager(new ClassicFacilitiesFactory()); manager.BuildGameFacilities(); manager.play(); //创建两个系列的风格元素,GameManager类不需要改变只需要扩展类和工厂即可 Console.Read(); } } }