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

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

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

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

区别

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

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

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

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

AbstractFactory抽象工厂类

    public abstract class AbstractFactorys
{
/// <summary>
/// 获取屏幕产品
/// </summary>
/// <returns></returns>
public abstract Screen screen();
/// <summary>
/// 获取手机产品
/// </summary>
/// <returns></returns>
public abstract Mobile Mobile();
}

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

    /// <summary>
/// 屏幕抽象类
/// </summary>
public abstract class Screen
{
public abstract void DisplayScreen();
}
     /// <summary>
/// 手机抽象类
/// </summary>
public abstract class Mobile
{
public abstract void DisplayMobile();
}

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

     /// <summary>
/// LG 手机类输出
/// </summary>
public class _LGPhone : Mobile
{
public override void DisplayMobile()
{
Console.WriteLine("生产LG手机");
}
}
     /// <summary>
/// LG屏幕输出
/// </summary>
public class _LGScreen : Screen
{
public override void DisplayScreen()
{
Console.WriteLine("生产LG屏幕");
}
}

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

     /// <summary>
/// 三星手机输出
/// </summary>
public class _SamsungPhone : Mobile
{
public override void DisplayMobile()
{
Console.WriteLine("生产三星手机");
}
}
     /// <summary>
/// 三星屏幕输出
/// </summary>
public class _SamsungScreen : Screen
{
public override void DisplayScreen()
{
Console.WriteLine("生产三星屏幕");
}
}

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

    /// <summary>
/// LG生产工厂
/// </summary>
public class LGFactory : AbstractFactorys
{
/// <summary>
/// 获取LG生产的手机
/// </summary>
/// <returns></returns>
public override Mobile Mobile()
{
return new _LGPhone();
}
/// <summary>
/// 获取LG生产的屏幕
/// </summary>
/// <returns></returns>
public override Screen screen()
{
return new _LGScreen();
}
}

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

    /// <summary>
/// 三星实例工厂
/// </summary>
public class SamsungFactory : AbstractFactorys
{
/// <summary>
/// 三星生产的手机
/// </summary>
/// <returns></returns>
public override Mobile Mobile()
{
return new _SamsungPhone();
}
/// <summary>
/// 三星生产的屏幕
/// </summary>
/// <returns></returns>
public override Screen screen()
{
return new _SamsungScreen();
}
}

测试输出:

class Program
{
static void Main(string[] args)
{
//输出三星的产品
AbstractFactorys samsung = new SamsungFactory();
Mobile _samsungMobile = samsung.Mobile();
Screen _samsungScreen = samsung.screen();
_samsungMobile.DisplayMobile();
_samsungScreen.DisplayScreen(); //输出LG的产品
AbstractFactorys lg = new LGFactory();
Mobile _lgMobile = lg.Mobile();
Screen _lgScreen = lg.screen();
_lgMobile.DisplayMobile();
_lgScreen.DisplayScreen(); Console.ReadKey();
}
}

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. 2.7 清除FTP服务器文件

    清除服务器文件 from ftptools import FtpTools class CleanAll(FtpTools): '''delete an entire remote tree of s ...

  2. linux 安装【jdk、tomcat】查看对外开放端口(防火墙拦截处理)

    1.安装 jdkhttps://www.cnblogs.com/xu-dong/p/6422938.html 查看Linux下查看JDK安装路径: https://www.cnblogs.com/im ...

  3. timeline server介绍

    1. timeline是什么 2. timeline能做什么 3. timeline结构 4. timeline怎么配置   1). timeline是什么? 它能存储和检索应用当前和历史信息在yar ...

  4. Selenium+Eclipse+Python 环境搭建

    第一步:安装Python 根据下面的地址,直接一键安装,全部默认方式. 下载地址:http://www.python.org/ftp/python/2.7.5/python-2.7.5.msi 安装到 ...

  5. 为何放弃Eclipse,选择IntelliJ IDEA,看完终于明白了

    如果你初次用idea,毫无目的的度娘如何使用IDEA     浪费的将会是大量的时间.一套让你花时间,少走弯路的视频教程(下载地址:https://pan.baidu.com/s/1gfeX3hD) ...

  6. TensorFlow 神经网络相关函数

    TensorFlow 激活函数 激活操作提供用于神经网络的不同类型的非线性.这些包括平滑的非线性(sigmoid,tanh,elu,softplus,和softsign),连续的,但不是到处可微函数( ...

  7. 18-09-21 numpy 的基础学习01

    # 1关于numpy 的学习import numpy as np # 一 如何创建数组****# 1 有规律的一维数据的创建======# 1 range() 和arange() 区别 貌似没有区别l ...

  8. HTML和CSS标签常用命名规则

    1.Images 存放一些网站常用的图片: 2.Css 存放一些CSS文件: 3.Flash 存放一些Flash文件: 4.PSD 存放一些PSD源文件: 5.Temp 存放所有临时图片和其它文件: ...

  9. WKWebView 加载本地HTML随笔

    一天的时间 解决两个坑~~ 1.加载不出来本地HTML 的JS  CSS 样式,问题是引用到项目中 是用的group 这个是错的 直接上图 就知道了 像上图一样,加入相对路径即可,因为如果使用了gro ...

  10. yuan的第二次随笔

    第一题: 计算两数的和与差 设计思路: 1:看题目:主函数与函数声明,知道它要你干什么 2:理解与分析:在main中,定义两个实数a,b;要你求两数的和与差 3:解答:通过调用函数sum_diff,指 ...