简单工厂模式 和 工厂方法 和 抽象工厂的区别

2023-09-14 14:04:05

简单工厂模式、工厂方法模式和抽象工厂模式是三种不同的创建型设计模式,它们在对象的创建和封装方面有不同的用途和实现方式。以下是它们之间的主要区别:

1. **简单工厂模式(Simple Factory Pattern)**:

   - **目的**:简单工厂模式的主要目的是封装对象的创建逻辑,以便客户端代码无需知道具体对象的创建细节。它将对象的创建集中在一个工厂类中,客户端通过工厂类来请求所需的对象。
   
   - **结构**:简单工厂模式包含一个工厂类,该工厂类通常有一个静态方法,根据传入的参数或条件创建不同的产品对象。
   
   - **示例**:例如,您可以有一个`PizzaFactory`工厂类,根据不同的参数(比如披萨类型)创建不同的披萨对象。

   ```csharp
   public class PizzaFactory
   {
       public static Pizza CreatePizza(string pizzaType)
       {
           if (pizzaType == "Cheese")
           {
               return new CheesePizza();
           }
           else if (pizzaType == "Pepperoni")
           {
               return new PepperoniPizza();
           }
           // ...
           return null;
       }
   }
   ```

2. **工厂方法模式(Factory Method Pattern)**:

   - **目的**:工厂方法模式的主要目的是将对象的创建延迟到子类中。它定义了一个接口或抽象类,包含一个工厂方法,具体的产品创建由子类实现。这样,每个具体子类可以创建不同类型的产品,而客户端代码只需要知道抽象工厂接口即可。

   - **结构**:工厂方法模式包含一个抽象工厂接口或抽象类,以及多个具体工厂类,每个具体工厂类负责创建一种产品。

   - **示例**:例如,您可以有一个`PizzaStore`抽象工厂,其中包含一个工厂方法`CreatePizza()`,而具体的披萨店子类(如`NYStylePizzaStore`和`ChicagoStylePizzaStore`)实现了`CreatePizza()`方法来创建不同地区的披萨。

   ```csharp
   public abstract class PizzaStore
   {
       public abstract Pizza CreatePizza(string pizzaType);
       
       public Pizza OrderPizza(string pizzaType)
       {
           Pizza pizza = CreatePizza(pizzaType);
           pizza.Prepare();
           pizza.Bake();
           // ...
           return pizza;
       }
   }
   ```

3. **抽象工厂模式(Abstract Factory Pattern)**:

   - **目的**:抽象工厂模式的主要目的是提供一个接口,用于创建一系列相关或依赖的对象。它有助于确保一组对象能够协同工作。

   - **结构**:抽象工厂模式包含一个抽象工厂接口,每个具体工厂类都实现了这个接口。每个具体工厂类可以创建一组相关的产品,而不仅仅是一个产品。

   - **示例**:例如,您可以有一个`UIFactory`抽象工厂,其中包含创建按钮和文本框的方法。然后,不同主题下的具体工厂类(如`LightThemeFactory`和`DarkThemeFactory`)分别实现了这些方法来创建特定主题下的按钮和文本框。

   ```csharp
   public interface IUIFactory
   {
       IButton CreateButton();
       ITextbox CreateTextbox();
   }
   ```

总的来说,这三种工厂模式有不同的用途和结构:

- 简单工厂模式用于将对象创建逻辑封装在一个工厂类中,对客户端代码隐藏对象的创建细节。
- 工厂方法模式用于将对象创建延迟到子类中,以支持多态性,并使客户端代码更灵活。
- 抽象工厂模式用于创建一组相关的对象,确保这些对象可以协同工作,并通过一组相关的工厂接口来实现。

更多推荐

C#回调函数学习1

回调函数(CallbackFunction)是一种函数指针,它指向的是由用户自己定义的回调函数。我们将这个回调函数的指针作为参数传递给另外一个函数,在这个函数工作完成后,它将通过这个回调函数的指针来回调通知调用者处理结果。此定义来自网上;看一个例子;这是用委托实现的回调函数;usingSystem;usingSyste

懒人福音!数据显示:剧烈运动5分钟即可预防癌症,风险降低30%

剧烈的间歇性生活方式体育活动,简称VILPA,是由悉尼大学查尔斯·珀金斯中心的研究人员创造的,用来描述我们每天津津有味地进行的非常短暂的活动爆发,每次大约一分钟。这包括剧烈的家务、在杂货店周围大量购物、爆发力量行走或与孩子们玩高能量游戏等活动。早在,2022年12月8日,澳大利亚悉尼大学、英国伦敦大学的研究人员在Nat

ipv6笔记及总结

1、路由器请求消息RouterSolicitation和路由器通告RouterAdvertisement消息主要用于无状态地址的情况下,有状态的情况使用的是dhcpv6server分配(例如:IPv6地址以及其他信息(DNS、域名等))。2、关于IPv6自动配置及M、O比特的小结那么对于自动配置来说,主机在什么情况下,

25 WEB漏洞-XSS跨站之原理分类及攻击手法

目录XSS跨站漏洞产生原理,危害,特点?本质产生层面函数类漏洞操作对应层,危害影响浏览器内核版本等XSS跨站漏洞分类:反射,存储,DOMXSS常规攻击手法:平台,工具,结合其他等演示案例:XSS平台及工具简要演示测试XSS跨站漏洞产生原理,危害,特点?本质跨站跟我们语言上面是没有什么关系,大部分都是前端的一个漏洞在变量

ChatGPT企业版来了,速度翻倍,无使用限制

美国时间8月28日,OpenAI宣布了自ChatGPT推出以来最重大的新闻:将推出ChatGPT企业版,企业版ChatGPT将直接对接GPT-4,提供无限制访问、高级数据分析功能、定制服务等服务,并支持处理更长文本输入的长上下文窗口。OpenAI首席运营官BradLightcap告诉媒体,这个工具已经在“不到一年”的时

logback日志是怎么保证多线程输出日志线程安全的

logback中的单例模式logback日志框架使用了单例设计模式来进行日志输出。在logback中,Logger类是一个关键的组件,它负责记录和输出日志消息。Logger类使用了单例设计模式,确保在一个应用程序中只存在一个Logger实例。这样做的好处是可以确保所有的日志消息都被集中到同一个日志输出器中,避免了多个日

无人机“长坡”上,谁是滚出“厚雪球”的长期主义者?

“股神”巴菲特,曾提出过“长坡厚雪”的理论:人生就像滚雪球,重要的是发现很湿的雪和很长的坡。运用到企业经营上,“长坡”指的是企业所布局的领域发展潜力足、空间大;而“湿雪”,指的是企业竞争力强、有长期主义精神。将湿雪沿着长坡不断滚成厚雪球,就能收获长期主义的复利。就当下来看,在众多领域当中,无人机属于典型的“长坡”。全球

《时代》百大AI人物榜单公布,李彦宏、Sam Altman、黄仁勋等评为全球AI领袖

9月7日晚,《时代》周刊发布了首届全球百大AI人物。这100个人组成的群体在很多方面都是推动人工智能发展的关系和权力中心的地图。他们是竞争对手和监管者、科学家和艺术家、倡导者和高管——既竞争又合作的人类,他们的洞察力、欲望和缺陷将塑造这个影响力日益增强的技术的方向。”“人工智能的独特之处也是最令人恐惧和值得庆祝的地方,

生产消费者模型的介绍以及其的模拟实现

目录生产者消费者模型的概念生产者消费者模型的特点基于阻塞队列BlockingQueue的生产者消费者模型对基于阻塞队列BlockingQueue的生产者消费者模型的模拟实现ConProd.c文件的整体代码BlockQueue.h文件的整体代码对【基于阻塞队列BlockingQueue的生产者消费者模型的模拟实现】的测试

openGauss学习笔记-70 openGauss 数据库管理-创建和管理普通表-查看表数据

文章目录openGauss学习笔记-70openGauss数据库管理-创建和管理普通表-查看表数据70.1查询数据库所有表的信息70.2查询表的属性70.3查询表的数据量70.4查询表的所有数据70.5查询字段的数据70.6过滤字段的重复数据70.7查询字段为某某的所有数据70.8按照字段进行排序openGauss学习

深入学习 Redis Sentinel - 基于 DockerCompose 编排哨兵分布式架构,理解工作原理

目录一、哨兵模式1.1、为何引入哨兵模式1.2、RedisSentinel分布式架构1.2.1、概述1.2.2、工作原理(redis哨兵的核心功能)1.监控:2.自动故障转移:3.通知1.2.3、问题:哨兵结点只有一个可以么?1.3、使用Docker和DockerCompose模拟部署哨兵模式1.3.1、前言1.3.2

热文推荐