抽象工厂模式(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();
}
}

最新文章

  1. 在VisualStudio2012环境下安装ArcEngine 10.0
  2. ubuntu 12.04 &quot;系统的网络服务与此版本的网络管理器不兼容
  3. QQ聊天机器人for PHP版 (登录,收、发消息)
  4. DataGridView控件-学习笔记总结
  5. C# 通信学习笔记
  6. Suse发生了错误Access denied for user &amp;#39;&amp;#39;@&amp;#39;localhost&amp;#39; to&amp;amp;
  7. 吾爱破解脱壳练习第五期------upx壳
  8. 自己编写的仿京东移动端的省市联动选择JQuery插件
  9. XIV Open Cup named after E.V. Pankratiev. GP of Europe
  10. orcl数据库锁等级研究小记
  11. keepalived高可用系列~ keepalived+proxysql
  12. Servlet(9)—HttpServlet和改进Servlet实例
  13. scala-创建泛型数组(T: Manifest)
  14. Django学习笔记之数据库-数据库与模型
  15. 谈谈程序猿求职简历的STAR法则
  16. 四则运算-ppt演示
  17. ucore-lab1-练习4report
  18. 封装PDO连接数据库代码
  19. day30 python学习 struct模块和 subprocess 模块
  20. mysql系列学习

热门文章

  1. JS详细图解作用域链与闭包
  2. IntelliJ IDEA2018注册
  3. 【题解】Atcoder ARC#90 F-Number of Digits
  4. [牛客Wannafly挑战赛27D]绿魔法师
  5. [luoguT30208]太极剑
  6. [洛谷P4688][Ynoi2016]掉进兔子洞
  7. POJ2406:Power Strings——题解
  8. ACM3371超时问题
  9. ZooKeeper食谱(八)
  10. 【Foreign】数据结构C [线段树]