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

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

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

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

区别

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

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

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

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

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. slick插件一些配置

  2. 黄金点游戏 结队i项目

    结对编程——黄金点游戏   本次的结对编程的项目是黄金点游戏,我的结对对象是冯雨倩,我们的编程能力都不太好,而且都对C语言更熟悉些,因此我们决定用C语言来实现. (1)分工:角色分配:冯雨倩是领航员, ...

  3. groupadd语法

    groupadd [选项] 组 创建一个新的组.Groupadd命令使用命令行中指定的值加上系统默认值创建新的组账户.新组将根据需要输入系统. (1).选项 1 2 3 4 5 6 7 -f,--fo ...

  4. Binary Search Tree Learning Summary

    BST Definition BST is short for Binary Search Tree, by definition, the value of right node is always ...

  5. 【leetcode】415. Add Strings

    problem 415. Add Strings solution: class Solution { public: string addStrings(string num1, string nu ...

  6. windows server 2012启动进入cmd解决方法

    感谢网友http://sns.yhjy.cn/u/XperiaZ/Blog/t-4748 由于删除了framework 4.5引起的. windows server 2012默认安装framework ...

  7. latex之行内公式与行间公式

    1.行内公式 我是对行内公式的测试$f(x)=1+x+x^2$ 2.行间公式 单行不编号 \begin{equation} \int_0^1(1+x)dx \end{equation} 结果为: 单行 ...

  8. CCF-Markdown-201703-3

    这道题不存在递归结构 比如区块之间的相互嵌套 还有"[ [] ]" 链接的相互嵌套, 所以直接处理就好了 还可以 #include <bits/stdc++.h> us ...

  9. 2018.5.2 file结构体

    f_flags,File Status Flag f_pos,表示当前读写位置 f_count,表示引用计数(Reference Count): dup.fork等系统调用会导致多个文件描述符指向同一 ...

  10. centos7.1安装tomcat8

    上传软件包 [root@linux-node1 tools]# ls apache-tomcat-8.0.32.tar.gz jdk-8u74-linux-x64.tar.gz 添加普通用户tomca ...