一,抽象工厂模式

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace _3._1抽象工厂
{ //如果一个工厂模式提供上衣和裤子,那么他属于工厂方法模式;
//如果一个工厂模式提供棉袄上衣,休闲裤子,秋装上衣和西装裤子,那么这个工厂模式就是抽象工厂模式,因为他提供的产品是不同的等级结构的产品比如棉袄上衣和秋装上衣,就是不同等级的产品结构,而X码上衣和L码上衣则是属于相同等级的产品结构 //在抽象工厂模式中,有一个产品族的概念:所谓的产品族,是指位于不同产品等级结构中功能相关联的产品组成的家族,就比如棉袄上衣和秋装上衣是属于一个产品族,但是这两个是不同等级结构产品,但是产品之间有相互依赖、或作用的关系,从而组成人身上的一部分
//抽象工厂模式所提供的一系列产品就组成一个产品族(棉袄上衣,休闲裤子,秋装上衣和西装裤子);而工厂方法提供的一系列产品称为一个等级结构(只有上衣和裤子)。
class Program
{
static void Main(string[] args)
{
IPeopleFactory chinepeople1 = new ChinePeopleFactory();
string Clothes1 = chinepeople1.CreateClothes().show("X码");
string Shoes1 = chinepeople1.CreateShoes().show("32码");
Console.WriteLine("中国人穿了" + Clothes1 + "," + Shoes1); IPeopleFactory usapeople = new USAPeopleFactory();
string Clothes2 = usapeople.CreateClothes().show("X码");
string Shoes2 = usapeople.CreateShoes().show("32码");
Console.WriteLine("美国人穿了" + Clothes2 + "," + Shoes2); Console.ReadKey();
}
}
public interface IClothes
{
string show(string type);
}
public interface IShoes
{
string show(string type);
} public class ChineClothes : IClothes
{
public string show(string type)
{
return type + "棉袄上衣";
}
}
public class ChineShoes : IShoes
{
public string show(string type)
{
return type + "休闲裤子";
}
}
public class USAClothes : IClothes
{
public string show(string type)
{
return type + "秋装上衣";
}
}
public class USAShoes : IShoes
{
public string show(string type)
{
return type + "西装裤子";
}
} public interface IPeopleFactory
{
IClothes CreateClothes();
IShoes CreateShoes();
}
public class ChinePeopleFactory : IPeopleFactory
{
public IClothes CreateClothes()
{
return new ChineClothes();
}
public IShoes CreateShoes()
{
return new ChineShoes();
}
}
public class USAPeopleFactory : IPeopleFactory
{
public IClothes CreateClothes()
{
return new USAClothes();
}
public IShoes CreateShoes()
{
return new USAShoes();
}
}
}

二,抽象工厂和工厂模式的区别:

1,是针对的多个产品(对象)等级结构,而工厂模式是针对单个产品(对象)结构,而这些产品(对象)之间有相互依赖、或作用的关系

三,那这里的多个产品(对象)和产品(对象)之间相互依赖关系怎么理解呢?

1》产品(对象)理解:比如以上的代码例子,我们存在人,是需要鞋子和衣服的,而这里的鞋子和衣服属于工厂内的产品(对象)

单个产品(对象)等级结构的理解:在工厂模式中,我们的每个人的鞋子和衣服都是相同的,所以我们的鞋子和衣服是属于单个产品(对象)等级结构

多个产品(对象)等级结构的理解:在抽象工厂模式中,我们的每个人的鞋子和衣服都是不同的,比如有一个人需要棉袄上衣和休闲裤子,而另一个人则需要秋装上衣和西装裤子,产品(对象)等级结构出现了差异,所以是不同产品等级结构,这是就出现了多个产品(对象)等级结构,所以组成了一个产品族的概念

PS: 当有多个不同的等级结构的产品时,如果使用工厂方法模式就势必要使用多个独立的工厂等级结构来对付这些产品的等级结构。如果这些产品等级结构是平行的,会导致多个平行的工厂等级结构。

2》那什么是产品族?

产品族是指上衣这样的大类,而产品则是属于产品族这一大类的,而属于这一大类的许多产品合成一个产品族,也是系列对象的组成抽象工厂模式

3》产品(对象)之间相互依赖关系

产品直接都是存在依赖关系,比如棉袄上衣和休闲裤子组成人的一部分

  

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

  1. 设计模式——抽象工厂(Abstract Factory)

    提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们的具体类. ——DP UML类图 模式说明 抽象工厂与工厂方法在定义上最明显的区别是“创建一系列相关或相互依赖对象的接口”,由此可以看出抽象工 ...

  2. 抽象工厂(Abstract Factory),工厂方法(Factory Method),单例模式(Singleton Pattern)

    在谈工厂之前,先阐述一个观点:那就是在实际程序设计中,为了设计灵活的多态代码,代码中尽量不使用new去实例化一个对象,那么不使用new去实例化对象,剩下可用的方法就可以选择使用工厂方法,原型复制等去实 ...

  3. 面向对象设计——抽象工厂(Abstract Factory)模式

    定义 提供一个创建一系列相关或者相互依赖对象的接口,而无需指定它们具体的类.抽象工厂允许客户使用抽象的接口来创建一组相关的产品,而不需要知道或关心实际产出的具体产品是什么.这样一来,客户就能从具体的产 ...

  4. 设计模式四: 抽象工厂(Abstract Factory)

    简介 抽象工厂模式是创建型模式的一种, 与工厂方法不同的是抽象工厂针对的是生产一组相关的产品, 即一个产品族. 抽象工厂使用工厂方法模式来生产单一产品, 单一产品的具体实现分别属于不同的产品族. 抽象 ...

  5. 【设计模式】——抽象工厂Abstract Factory

    模式意图 提供对象的使用接口,隐藏对象的创建过程. 模式结构 AbstractFactory 提供创建对象的接口. ConcreteFactory 提供真正创建对象的实现类,用于组合并创建不同的对象, ...

  6. 5、抽象工厂 abstract factory 将关联组件组成产品 创建型模式

    趁热打铁,紧跟着上一节的工厂方法模式.这一节介绍一下抽象工厂模式,以及分析俩个模式的不同 1.何为抽象模式? 抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他 ...

  7. 工厂模式[3] 抽象工厂 Abstract Factory

    简介 1.简单工厂,或静态工厂,产品接口 定义:专门定义一个类来负责创建其他类的实例,被创建的实例通常具有共同的父类或实现同一接口 优点:客户端可以直接消费产品,而不必关心具体产品的实现(不关心对象的 ...

  8. C2:抽象工厂 Abstract Factory

    提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类. 应用场景: 一系列相互依赖的对象有不同的具体实现.提供一种“封装机制”来避免客户程序和这种“多系列具体对象创建工作”的紧耦合 UM ...

  9. Java 工厂模式(一)— 抽象工厂(Abstract Factory)模式

    一.抽象工厂模式介绍: 1.什么是抽象工厂模式: 抽象工厂模式是所有形态的工厂模式中最为抽象和最具有一般性的一种形态,抽象工厂模式向客户端提供一个接口,使得客户端在不知道具体产品的情类型的情况下,创建 ...

  10. Headfirst设计模式的C++实现——抽象工厂(Abstract Factory)

    Dough.h #ifndef _DOUGH_H #define _DOUGH_H class Dough { }; #endif ThinCrustDough.h #ifndef _THIN_CRU ...

随机推荐

  1. c# 匿名委托

    using System; namespace AnonymousMethod { delegate void ArithmeticOperation(double operand1, double ...

  2. uboot中Kconfig架构的理解

    1./u-boot-2019.07/Kconfig 是顶层Kconfig mainmenu "U-Boot $UBOOTVERSION Configuration"  #这是总me ...

  3. alert(1) to win 6

    function escape(s) { // Slightly too lazy to make two input fields. // Pass in something like " ...

  4. windows下如何安装pip

    在安装pip前,请确认win系统中已经安装好了python,和easy_install工具 Python完成后 配置环境变量 在环境变量中添加Python目录 (1) 右键点击"计算机&qu ...

  5. TreeMap和Comparable接口

    备注:HashMap线程不安全,效率高,允许key.value为空 HasTable线程安全.效率低.不允许key或value为空 TreeMap在存储时会自动调用comparable方法进行排序,当 ...

  6. Centos抓包方法

    1. 安装tcpdump工具 rpm -ql tcpdump #查看tcpdump是否安装 本机是安装的,yum安装: yum install tcpdump 2.  tcpdump抓包 根据协议和端 ...

  7. 一篇文章让你详细了解何为JSON

    JSON详解: JSON的全称是“ JavaScript Object Notation”,意思是JavaScript对象表示法,它是一种基于文本,独立于语言的轻量级数据交换格式.XML也是一种数据交 ...

  8. B/S大文件断点续传

    一. 功能性需求与非功能性需求 要求操作便利,一次选择多个文件和文件夹进行上传:支持PC端全平台操作系统,Windows,Linux,Mac 支持文件和文件夹的批量下载,断点续传.刷新页面后继续传输. ...

  9. 退役——halfrot's life in OI

    这是一个没有人看的博客里丢了两年的坑,还有很多事应该做,但是我很懒,所以今天把它填了. 前记:和很多人的竞赛生涯一样,一开始我也是奋不顾身,奔月而去,然而身处弱校,没有人引导方向,再加上自己很蒻的主要 ...

  10. FastDFS整合普通Maven项目(四)

    1.下载官方的源代码:https://codeload.github.com/happyfish100/fastdfs-client-java/zip/master 2.采用maven命令编译成jar ...