简单工厂模式: 简单工厂模式的工厂类随着产品类的增加需要增加额外的代码

工厂方法模式: 工厂方法模式每个具体工厂类只完成单个实例的创建,所以它具有很好的可扩展性 但是在实际应用中,一个工厂不止会创建单一的产品,因为现在的工厂都多元化了,一个工厂创建一系列的产品,这就引入了抽象工厂的概念。

抽象工厂模式 :   抽象工厂模式是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类。每个生成的工厂都能按照工厂模式提供对象。

区别

简单工厂 : 用来生产同一等级结构中的任意产品。(对于增加新的产品,无能为力)

工厂方法 :用来生产同一等级结构中的固定产品。(支持增加任意产品)

抽象工厂 :用来生产不同产品族的全部产品。(对于增加新的产品,无能为力;支持增加产品族)

实例: 在一个生产显示屏幕和手机的工厂中,不同的流水线生产的产品不同。有的流水线生产显示器,有的生产手机。而且每条线上生产的显示器和手机品牌也不一样。下面用代码实现

AbstractFactory抽象工厂类

  1. public abstract class AbstractFactorys
  2. {
  3. /// <summary>
  4. /// 获取屏幕产品
  5. /// </summary>
  6. /// <returns></returns>
  7. public abstract Screen screen();
  8. /// <summary>
  9. /// 获取手机产品
  10. /// </summary>
  11. /// <returns></returns>
  12. public abstract Mobile Mobile();
  13. }

显示器屏幕抽象类和手机抽象类(可以理解为手机流水线和显示器流水线)

  1. /// <summary>
  2. /// 屏幕抽象类
  3. /// </summary>
  4. public abstract class Screen
  5. {
  6. public abstract void DisplayScreen();
  7. }
  1. /// <summary>
  2. /// 手机抽象类
  3. /// </summary>
  4. public abstract class Mobile
  5. {
  6. public abstract void DisplayMobile();
  7. }

生产的LG品牌的手机和屏幕

  1. /// <summary>
  2. /// LG 手机类输出
  3. /// </summary>
  4. public class _LGPhone : Mobile
  5. {
  6. public override void DisplayMobile()
  7. {
  8. Console.WriteLine("生产LG手机");
  9. }
  10. }
  1. /// <summary>
  2. /// LG屏幕输出
  3. /// </summary>
  4. public class _LGScreen : Screen
  5. {
  6. public override void DisplayScreen()
  7. {
  8. Console.WriteLine("生产LG屏幕");
  9. }
  10. }

生产的三星(Samsung)品牌的手机和屏幕

  1. /// <summary>
  2. /// 三星手机输出
  3. /// </summary>
  4. public class _SamsungPhone : Mobile
  5. {
  6. public override void DisplayMobile()
  7. {
  8. Console.WriteLine("生产三星手机");
  9. }
  10. }
  1. /// <summary>
  2. /// 三星屏幕输出
  3. /// </summary>
  4. public class _SamsungScreen : Screen
  5. {
  6. public override void DisplayScreen()
  7. {
  8. Console.WriteLine("生产三星屏幕");
  9. }
  10. }

通过LG实例工厂得到LG品牌手机和显示器的实例

  1. /// <summary>
  2. /// LG生产工厂
  3. /// </summary>
  4. public class LGFactory : AbstractFactorys
  5. {
  6. /// <summary>
  7. /// 获取LG生产的手机
  8. /// </summary>
  9. /// <returns></returns>
  10. public override Mobile Mobile()
  11. {
  12. return new _LGPhone();
  13. }
  14. /// <summary>
  15. /// 获取LG生产的屏幕
  16. /// </summary>
  17. /// <returns></returns>
  18. public override Screen screen()
  19. {
  20. return new _LGScreen();
  21. }
  22. }

通过三星(Samsung)实例工厂得到LG品牌手机和显示器的实例

  1. /// <summary>
  2. /// 三星实例工厂
  3. /// </summary>
  4. public class SamsungFactory : AbstractFactorys
  5. {
  6. /// <summary>
  7. /// 三星生产的手机
  8. /// </summary>
  9. /// <returns></returns>
  10. public override Mobile Mobile()
  11. {
  12. return new _SamsungPhone();
  13. }
  14. /// <summary>
  15. /// 三星生产的屏幕
  16. /// </summary>
  17. /// <returns></returns>
  18. public override Screen screen()
  19. {
  20. return new _SamsungScreen();
  21. }
  22. }

测试输出:

  1. class Program
  2. {
  3. static void Main(string[] args)
  4. {
  5. //输出三星的产品
  6. AbstractFactorys samsung = new SamsungFactory();
  7. Mobile _samsungMobile = samsung.Mobile();
  8. Screen _samsungScreen = samsung.screen();
  9. _samsungMobile.DisplayMobile();
  10. _samsungScreen.DisplayScreen();
  11.  
  12. //输出LG的产品
  13. AbstractFactorys lg = new LGFactory();
  14. Mobile _lgMobile = lg.Mobile();
  15. Screen _lgScreen = lg.screen();
  16. _lgMobile.DisplayMobile();
  17. _lgScreen.DisplayScreen();
  18.  
  19. Console.ReadKey();
  20. }
  21. }

C#设计模式(4)——抽象工厂模式(Abstract Factory)的更多相关文章

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

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

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

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

  3. 二十四种设计模式:抽象工厂模式(Abstract Factory Pattern)

    抽象工厂模式(Abstract Factory Pattern) 介绍提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类. 示例有Message和MessageModel,Messag ...

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

    概述 描述 提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类:具体的工厂负责实现具体的产品实例 抽象工厂中每个工厂可以创建多种产品(如苹果公司生产iPhone.iPad): 工厂方法 ...

  5. 设计模式之抽象工厂模式(Abstract Factory Pattern)

    一.抽象工厂模式的由来 抽象工厂模式,最开始是为了解决操作系统按钮和窗体风格,而产生的一种设计模式.例如:在windows系统中,我们要用windows设定的按钮和窗体,当我们切换Linux系统时,要 ...

  6. 设计模式 笔记 抽象工厂模式 Abstract Factory

    //---------------------------15/04/09---------------------------- //Abstract Factory 抽象工厂----对象创建型模式 ...

  7. .NET设计模式(2):1.2 抽象工厂模式(Abstract Factory)

    概述 抽象工厂模式(Abstract Factory)是所有形态的工厂模式中最为抽象和最具一般性的一种形态.抽象工厂模式是指当有多个抽象角色时,使用的一种工厂模式.抽象工厂模式可以向客户端提供一个接口 ...

  8. 设计模式 - 抽象工厂模式(abstract factory pattern) 具体解释

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

  9. 抽象工厂模式(Abstract Factory)C#实例

    抽象工厂模式(Abstract Factory)C#实例 本文出处http://www.dofactory.com/net/abstract-factory-design-pattern 一.场景描述 ...

  10. 浅谈C++设计模式之抽象工厂(Abstract Factory)

    抽象工厂(Abstract Factory)模式是为了提供一系列相关或相互依赖对象的接口.对象创建型模式的一种. 客户Client 抽象工厂接口AbstractFactory 抽象工厂的实现类Conc ...

随机推荐

  1. HTML5:图片、音乐和视频

    图片.音乐和视频 一.图片 1.属性 属性 说明 alt 规定图像的替代文本. src 规定显示图像的 URL align 规定如何根据周围的文本来排列图像. border 定义图像周围的边框. he ...

  2. windows10 vs2017 C++连接MySQL

    安装mysql8.0 x64 创建test数据库,user表,插入数据如下: +----+------+----------+-----------------+ | id | name | pass ...

  3. [转] ROS2源码编译和安装

    机器人开源操作系统软件ROS在10年后, 终于推出全新架构的ROS2,代号“ardent”.中文意思为“热心的美洲鳖”,看来ROS2要从ROS1的“海龟”变成“土鳖”系列了. 与此同时,ROS2的编译 ...

  4. 使用CSMA/CD协议一个计算题

    题干: 首先计算一下A这个以太网所容许的最短的帧它的发送帧的长度时间为: (8(前同步码为8)+64(最短帧长))*8(单位转换b到B)=576比特 有关于单位转换: B是Byte的缩写,B就是Byt ...

  5. java-Calendar类

    1.Calendar类的概述和获取日期的方法 * A:Calendar类的概述 * Calendar 类是一个抽象类,它为特定瞬间与一组诸如 YEAR.MONTH.DAY_OF_MONTH.HOUR ...

  6. Spring的学习和源码的学习

    PS:Spring中有各种的Templeate,比如jdncTemplate,主要是为了避免各种模板的代码,抽象出来的 PS: @Configration.@Bean是用来替代xml那种解析方式 PS ...

  7. eclipse配置环境变量

    下载JDK:http://www.oracle.com/technetwork/java/javase/downloads/index.html 3.配置环境变量:右击“我的电脑”-->&quo ...

  8. Java_IO异常处理方式_入门小笔记

    package IO; import java.io.FileWriter; import java.io.IOException; /** * IO异常处理方式 */ class FileWrite ...

  9. 浅谈JavaScript函数重载

    上个星期四下午,接到了网易的视频面试(前端实习生第二轮技术面试).面了一个多小时,自我感觉面试得很糟糕的,因为问到的很多问题都很难,根本回答不上来.不过那天晚上,还是很惊喜的接到了HR面电话.现在HR ...

  10. Spring生态研习【四】:Springboot+mybatis(探坑记)

    这里主要是介绍在springboot里面通过xml的方式进行配置,因为xml的配置相对后台复杂的系统来说,能够使得系统的配置和逻辑实现分离,避免配置和代码逻辑过度耦合,xml的配置模式能够最大限度的实 ...