抽象工厂模式(Abstract Factory)
定义
抽象工厂模式(Abstract Factory),提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
类图
描述
多个抽象产品类,每个抽象产品类可以派生出多个具体产品类;
一个抽象工厂类,可以派生出多个具体工厂类;
每个具体工厂可以创建多个具体产品,即每个工厂可以生产一个产品集合。
应用场景
轿车是由发动机、车轮、车体结构、方向盘等部件组成的,现在要生产一辆轿车,就需要把各个部件抽象出来单独封装,再由汽车工厂来组装轿车。
/// <summary>/// 发动机接口/// </summary>public interface IEngine{void Install();}/// <summary>/// 奥迪发动机/// </summary>public class AudiEngine : IEngine{public void Install(){Console.WriteLine("安装奥迪的发动机.");}}/// <summary>/// 奔驰发动机/// </summary>public class BenzEngine : IEngine{public void Install(){Console.WriteLine("安装奔驰的发动机.");}}/// <summary>/// 车轮接口/// </summary>public interface IWheel{void InstallLeftFrontWheel();void InstallRightFrontWheel();void InstallLeftBackWheel();void InstallRightBackWheel();}/// <summary>/// 奥迪车轮/// </summary>public class AudiWheel : IWheel{public void InstallLeftFrontWheel(){Console.WriteLine("安装奥迪的左前车轮.");}public void InstallRightFrontWheel(){Console.WriteLine("安装奥迪的右前车轮.");}public void InstallLeftBackWheel(){Console.WriteLine("安装奥迪的左后车轮.");}public void InstallRightBackWheel(){Console.WriteLine("安装奥迪的右后车轮.");}}/// <summary>/// 奔驰车轮/// </summary>public class BenzWheel : IWheel{public void InstallLeftFrontWheel(){Console.WriteLine("安装奔驰的左前车轮.");}public void InstallRightFrontWheel(){Console.WriteLine("安装奔驰的右前车轮.");}public void InstallLeftBackWheel(){Console.WriteLine("安装奔驰的左后车轮.");}public void InstallRightBackWheel(){Console.WriteLine("安装奔驰的右后车轮.");}}/// <summary>/// 车体结构接口/// </summary>public interface IBody{void Install();}/// <summary>/// 奥迪的车体结构/// </summary>public class AudiBody : IBody{public void Install(){Console.WriteLine("安装奥迪的车身结构.");}}/// <summary>/// 奔驰的车体结构/// </summary>public class BenzBody : IBody{public void Install(){Console.WriteLine("安装奔驰的车身结构.");}}/// <summary>/// 汽车工厂接口/// </summary>public interface ICarFactory{IBody CreateBody();IEngine CreateEngine();IWheel CreateWheel();}/// <summary>/// 具体的奥迪工厂类/// </summary>public class AudiFactory : ICarFactory{public IEngine CreateEngine(){return new AudiEngine();}public IWheel CreateWheel(){return new AudiWheel();}public IBody CreateBody(){return new AudiBody();}}/// <summary>/// 具体的奔驰工厂类/// </summary>public class BenzFactory : ICarFactory{public IEngine CreateEngine(){return new BenzEngine();}public IWheel CreateWheel(){return new BenzWheel();}public IBody CreateBody(){return new BenzBody();}}