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

转载于:https://www.cnblogs.com/zhou-yi/p/5314710.html

设计模式之笔记--抽象工厂模式(Abstract Factory)相关推荐

  1. 【JAVA进阶系列】JAVA 设计模式 -- 抽象工厂模式(Abstract Factory)

    [JAVA进阶系列]JAVA 设计模式 -- 抽象工厂模式(Abstract Factory) [1.1]抽象工厂模式简介 抽象工厂者模式的类结构图 AbstractProduct(抽象产品),Abs ...

  2. 乐在其中设计模式(C#) - 抽象工厂模式(Abstract Factory Pattern)

    原文:乐在其中设计模式(C#) - 抽象工厂模式(Abstract Factory Pattern) [索引页] [源码下载] 乐在其中设计模式(C#) - 抽象工厂模式(Abstract Facto ...

  3. 【设计模式】抽象工厂模式 Abstract Factory Pattern

    简单工厂模式是一个工厂类根据工厂方法的参数创建不出不同的产品, 工厂方法模式是每一个产品都有一个一一对应的工厂负责创建该产品.那么今天要讲的抽象工厂模式是一个工厂能够产生关联的一系列产品.抽象工厂模式 ...

  4. 设计模式(20):创建型-抽象工厂模式(Abstract Factory)

    设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 毫无疑问,设计模式于 ...

  5. 设计模式 - 抽象工厂模式(abstract factory pattern) 详解

    抽象工厂模式(abstract factory pattern) 详解 本文地址: http://blog.csdn.net/caroline_wendy/article/details/270916 ...

  6. 抽象工厂模式 Abstract Factory Pattern

    源地址 抽象工厂模式 抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂.该超级工厂又称为其他工厂的工厂.这种类型的设计模式属于创建型模式,它提供了一种创建 ...

  7. 抽象工厂模式-Abstract Factory Pattern

    抽象工厂模式-Abstract Factory Pattern 抽象工厂模式(Abstract Factory Pattern):提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类.抽 ...

  8. 设计模式之抽象工厂模式(Abstract Factory)摘录

    面向对象系统的分析和设计实际上追求的就是两点:高内聚(Cohesion)和低耦合(Coupling). 23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式包括:1.Fa ...

  9. Net设计模式之抽象工厂模式(Abstract Factory Pattern)(1)

    一.抽象工厂模式简介(Bref Introduction) 抽象工厂模式(Abstract Factory Pattern),提供一个创建一系列相关或者相互依赖对象的接口,而无需制定他们的具体类.优点 ...

最新文章

  1. 使用Keras/TensorFlow模型构建属于你的Chatbot API
  2. NYOJ 456 邮票分你一半
  3. Qt: 找不到Qt5Widgets.lib
  4. java变位词_GoLang 字符串变位词
  5. MongoDB 教程八(结语): 一网打尽当下NoSQL类型、适用场景及使用公司
  6. 每日小记2017.2.22
  7. Wodpress模板
  8. 请求url处理java_【脚本写作】Java: HttpURLConnection请求处理
  9. mongodb 日常维护
  10. 小组作业:学生信息管理系统需求分析
  11. 使用Caffe框架训练模型
  12. Tesseract-OCR 4.0LSTM训练流程 (Windows环境下)
  13. 鸿蒙操作系统全面屏,首发鸿蒙操作系统!华为P50 Pro稳了:居中开孔全面屏
  14. 微信小程序摄像头监控_微信小程序读取摄像头 微信调用摄像头
  15. 5种RS485切换方向的方法及优劣势分析
  16. 1837:Balance
  17. Numpy中一维数组的shape如何理解
  18. 【文件格式_XML_HTML_】XML、HTML文件
  19. 2019年伯克利大学 CS294-112《深度强化学习》第1讲:课程介绍和概览(笔记)
  20. 163邮箱接口post登录战网(一)

热门文章

  1. PHP上传文件函数move_upload,如何使用php中move_uploaded_file函数
  2. 区块链热度背后的资本市场
  3. leetcode--最小路径和--python
  4. Android 依赖库发布(上传 Library 到 JCenter)gradle最高支持4.4
  5. usermod命令,用户密码管理和mkpasswd命令
  6. Javascript及Jquery获取元素节点以及添加和删除操作
  7. js变量以及其作用域详解
  8. 【Stage3D学习笔记续】山寨Starling(八):核心优化(批处理)的实现
  9. 软件开发流程包含哪些内容
  10. Java中关于进程和线程的理解