首页 > 其他分享 >设计模式之抽象工厂模式

设计模式之抽象工厂模式

时间:2024-09-07 16:25:19浏览次数:8  
标签:模式 工厂 电视机 抽象 产品 设计模式 等级

    由于工厂方法模式中的每个工厂只生产一类产品,可能会导致系统中存在大量的工厂类,势必会增加系统的开销。此时,可以考虑将一些相关的产品组成一个“产品族”,由同一个工厂来统一生产,这就是抽象工厂模式的基本思想。

    为了更好地理解抽象工厂模式,这里先引入如下两个概念:

    1. 产品等级结构。产品等级结构即产品的继承结构,例如一个抽象类是电视机,其子类有海尔电视机、海信电视机、TCL电视机,则抽象电视机与具体品牌电视机之间构成了一个产品等级结构,抽象电视机是父类,而具体品牌的电视机是其子类。

    2.产品族。产品族是指由同一个工厂生产的,位于不同产品等级结构中的一组产品。例如海尔电器工厂生产的海尔电视机、海尔电冰箱,海尔电视机位于电视机产品等级结构中,海尔电冰箱位于电冰箱产品等级结构中,海尔电视机、海尔电冰箱构成了一个产品族。

 

 

 

 

 

 

    当系统所提供的工厂生产的具体产品并不是一个简单的对象,而是多个位于不同产品等级结构、属于不同类型的具体产品时,就可以使用抽象工厂模式。抽象工厂模式与工厂方法模式最大的区别在于,工厂方法模式针对的是一个产品等级结构,而抽象工厂模式需要面对多个产品等级结构,一个工厂等级结构可以负责多个不同产品等级结构中的产品对象的创建。

    与工厂方法模式相比,抽象工厂模式中的具体工厂不只是创建一种产品,它负责创建一族产品。抽象工厂模式定义如下:提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类。

    在抽象工厂模式中,每个具体工厂都提供了多个工厂方法用于产生多种不同类型的产品,这些产品构成了一个产品族。在抽象工厂中声明了多个工厂方法,用于创建不同类型的产品,抽象工厂可以是接口,也可以是抽象类或者具体类。

   

 

 

 

 

 

 

 

 

 

 

 

 

  •     AbstractFactory(抽象工厂):声明了一组用于创建一族产品的方法,每个方法对应一种产品。
  •     ConcreteFactory(具体工厂):它实现了在抽象工厂中声明的创建产品的方法,生成一组具体产品,这些产品构成了一个产品族,每种产品都位于某个产品等级结构中。
  •     AbstractProduct(抽象产品):它为每种产品声明接口,在抽象产品中声明了产品所具有的业务方法。
  •     ConcreteProduct(具体产品):它定义具体工厂生产的具体产品对象,实现在抽象产品接口中声明的业务方法。 

 

缺点:抽象工厂模式中,增加新的产品族很方便,但是增加新的产品等级结构很麻烦,抽象工厂模式的这种性质称为开闭原则倾斜性。

优点:

1. 抽象工厂模式隔离了具体类的生成,使得客户并不需要知道什么被创建。由于这种隔离,更换一个具体工厂就变得相对容易,所有的具体工厂都实现了在抽象工厂中声明的那些公共接口,因此只需改变具体工厂的实例,就可以在某种程度上改变整个软件系统的行为。

2. 当一个产品族中的多个对象被设计成一起工作时,它能够保证客户端始终只使用同一个产品族中的对象。

3. 增加新的产品族很方便,无须修改已有系统,符合开闭原则。

举例:

 

标签:模式,工厂,电视机,抽象,产品,设计模式,等级
From: https://www.cnblogs.com/LXLR/p/18401800

相关文章

  • 设计模式之模板方法模式(三分钟学会一个设计模式)
    模板方法模式(TemplateMethodPattern)也称之为模板模式(TemplatePattern),是设计模式中最简单的模式之一。先来看定义:定义一个操作中算法的骨架(模板),将一些步骤延迟到子类中,模板方法使得子类可以不改变算法的结构即可重新定义算法某些特定的步骤。这个定义还是有一些晦涩,我的理解是......
  • 活动系统开发之采用设计模式与非设计模式的区别-设计模式
    1、父类Base.php<?php/***初始化控制器*User:Administrator*Date:2022/9/26*Time:18:00*/declare(strict_types=1);namespaceapp\controller;useapp\model\common\Token;useapp\BaseController;useapp\BaseError;useOpenSSL\Encrypt;usea......
  • 【Java 学习】:抽象类&接口
    ✨                         人逢喜事精神爽,月到中秋分外明    ......
  • 活动系统开发之采用设计模式与非设计模式的区别-非设计模式
    1、父类Base.php<?php/***初始化控制器*User:Administrator*Date:2022/9/26*Time:18:00*/declare(strict_types=1);namespaceapp\controller;useapp\model\common\Token;useapp\BaseController;useapp\BaseError;useOpenSSL\Encrypt;usea......
  • Spring 中使用的设计模式全面解析
    Spring框架作为Java开发的核心技术栈之一,广泛应用了多种设计模式来简化复杂系统的开发,提升代码的复用性、可维护性和扩展性。本文将全面解析Spring框架中所应用的设计模式,并通过案例来解释这些设计模式的实际作用。1.设计模式的总体概述Spring框架内应用的设计模式多达......
  • PHP8面向对象快速入门五 接口 抽象类
    在PHP中,接口是一种定义方法但不实现它们的方式。接口可以被类实现,使得这些类承诺实现接口中定义的所有方法。接口主要用于定义类的共同行为,而不涉及具体的实现细节。以下是PHP接口的基本用法:定义接口interfaceAnimal{publicfunctionmakeSound();publicfunct......
  • 设计模式之单例模式
      大家好!欢迎莅临厚土燎原的天地,深感荣幸能与您相遇在此,共同品读我的拙作。您的阅读如同春风化雨,对我而言意义非凡。衷心邀请您留下宝贵的评论与指点,每一字一句都是对我莫大的鼓励与鞭策。热烈欢迎,期待与您智慧碰撞,共绘思想的火花! ......
  • 探索智能巡检系统在工厂设备巡检中的应用
    在工厂里,设备可是宝贝疙瘩,它们的正常运行直接关系到生产的效率和企业效益。那工厂设备日常巡检都有啥内容呢?简单来说,设备日常巡检就是要检查设备的外观有没有损坏、运行的时候有没有奇怪的声音、温度是不是正常等等。这些看似简单的检查工作,却对工厂的生产安全至关重要。但是呢,传统......
  • 设计模式背后的设计原则和思想
    设计模式背后的设计原则和思想是一套指导我们如何设计高质量软件系统的准则和方法论。这些原则和思想不仅有助于提升软件的可维护性、可扩展性和可复用性,还能帮助开发团队更好地应对复杂多变的需求。以下是一些核心的设计原则和思想:1.设计原则设计模式背后的设计原则主要包......
  • 章10——面向对象编程(高级部分)——抽象类
    介绍更多意义在于其设计意义。供子类参考的一个模板。注意细节final、private、static与重写矛盾,不可与abstract共用!补充说明static方法可以被继承,不可以被重写,若父子方法名相同,则会隐藏derive类派生类方法,调用base类基类方法。静态方法时编译时绑定的,而方法重写是运行时......