GoF23种设计模式之创建型模式之抽象工厂模式

C++进阶(语法篇)—第11章 设计模式 11.设计模式 11.1 GoF和Design Patterns 1994年,由4位大牛(GoF)合著出版了《Design Patterns: Elements of Reusable Object-Oriented Software》一书,中文翻译为《设计模式》。该书首次提出了软件开发中设计模式的概念,将设计模式规范化并提升到了理论高度。在书中提及了23种设计模式,这些模式可以分为3类:创建... 阅读详情

一、概述

        提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。

二、适用性

1.一个系统要独立于它的产品的创建、组合和表示的时候。

2.一个系统要由多个产品系列中的一个来配置的时候。

3.当你要强调一系列相关的产品对象的设计以便进行联合使用的时候。

4.当你提供一个产品类库,而只想显示它们的接口而不是实现的时候。

三、参与者

1.AbstractFactory:声明一个创建抽象产品对象的操作接口。

2.ConcreteFactory:实现创建具体产品对象的操作。

3.AbstractProduct:为一类产品对象声明一个接口。

4.ConcreteProduct:定义一个将被相应地具体工程创建的产品对象。实现AbstractProduct接口。

5.Client:仅使用由AbstractFactory和AbstractProduct类声明的接口。

四、类图


五、示例

AbstractFactory

package cn.lynn.abstractfactory;

public interface IAnimalFactory {

    public IMouse createMouse();

    public ICat createCat();

}
ConcreteFactory
package cn.lynn.abstractfactory;

public class WhiteAnimalFactory implements IAnimalFactory {

    @Override
    public IMouse createMouse() {
        return new WhiteMouse();
    }

    @Override
    public ICat createCat() {
        return new WhiteCat();
    }

}
package cn.lynn.abstractfactory;

public class BlackAnimalFactory implements IAnimalFactory {

    @Override
    public IMouse createMouse() {
        return new BlackMouse();
    }

    @Override
    public ICat createCat() {
        return new BlackCat();
    }

}
AbstractProduct
package cn.lynn.abstractfactory;

public interface IMouse {

    public void eat();

}
package cn.lynn.abstractfactory;

public interface ICat {

    public void eat();

}
ConcreteProduct
package cn.lynn.abstractfactory;

public class WhiteMouse implements IMouse {

    @Override
    public void eat() {
        System.out.println("白老鼠偷吃花生!");
    }

}
package cn.lynn.abstractfactory;

public class BlackMouse implements IMouse {

    @Override
    public void eat() {
        System.out.println("黑老鼠偷吃花生!");
    }

}
package cn.lynn.abstractfactory;

public class WhiteCat implements ICat {

    @Override
    public void eat() {
        System.out.println("白猫贪吃咸鱼!");
    }

}
package cn.lynn.abstractfactory;

public class BlackCat implements ICat {

    @Override
    public void eat() {
        System.out.println("黑猫贪吃咸鱼!");
    }

}
Client
package cn.lynn.abstractfactory;

public class Client {

    public static void main(String[] args) {
        IAnimalFactory whiteAnimalfactory = new WhiteAnimalFactory();
        IMouse whiteMouse = whiteAnimalfactory.createMouse();
        whiteMouse.eat();
        ICat whiteCat = whiteAnimalfactory.createCat();
        whiteCat.eat();
        
        IAnimalFactory blackAnimalfactory = new BlackAnimalFactory();
        IMouse blackMouse = blackAnimalfactory.createMouse();
        blackMouse.eat();
        ICat blackCat = blackAnimalfactory.createCat();
        blackCat.eat();
    }

}
Result
白老鼠偷吃花生!
白猫贪吃咸鱼!
黑老鼠偷吃花生!
黑猫贪吃咸鱼!

一个很好的抽象工厂实例 这是一个抽象工厂的经典实例,内附源码,数据库,用法说明 立即下载

相关推荐

iOS马甲包过审实战:如何用5天时间搞定4.3审核(附完整代码混淆方案)

本文提供了一套为期五天的高效实战方案,专门解决iOS应用因重复或抄袭问题而被App Store的4.3条款拒绝的难题。方案涵盖深度分析、代码混淆、资源翻新及环境隔离等系统性步骤,并附有完整的代码混淆示例,旨在帮助开发者在合规框架内重塑应用,显著提升过审成功率。

weixin_29234239的博客 147

设计模式之工厂模式(l流水线模式)

1.简介 工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。 2.介绍 意图:定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行...

行者 2221

2、瑞丽-伯纳德对流的拉格朗日拟序结构(FTLE场结果对比)

在中,我简单比较了瑞丽伯纳德对流的FTLE场,但是因为粒子追踪采用的是欧拉方法,所以精度不是很高, 因此与文献中的结果还是有些差别。下面放一张文献中的FTLE场,参数与上篇文章是一致的,Ra = 1e8;Pr = 1;本文将详细的介绍如何得到这样的图片,好吧,其实也不是很详细。总之,先展示以下我个人的结果。可以看出,上图基本上与文献是一致的,因为这里展示的是瞬时场,所以当然不可能是完全一致,至于提取的LCS结构,我在下面也会提及。本着详细介绍的原则,所以这里我很良心的从流场计算开始介绍。

ambu1230的博客 1785

23种设计模式-创建型模式-工厂模式(包括工厂方法模式和抽象工厂模式)

hh

诚 301

GPS从入门到放弃(十七) --- 对流层延时

GPS从入门到放弃(十七) — 对流层延时 对流层概念 对流层(Troposphere)地球大气层靠近地面的一层。它同时是地球大气层里密度最高的一层,它蕴含了整个大气层约75%的质量,以及几乎所有的水蒸气及气溶胶。 对流层的下界与地面相接,上界高度随地理纬度和季节而变化,在低纬度地区平均高度为1718公里,在中纬度地区平均为1012公里,在高维度地区平均为8~9公里,并且夏季高于冬季。 卫星导航...

tyst08的专栏 1万+

手把手教你用VCS+Verdi在Linux下仿真蜂鸟E203 RISC-V核(附波形调试技巧)

本文详细介绍了在Linux环境下使用VCS和Verdi工具链对蜂鸟E203 RISC-V核进行仿真验证的完整流程。从环境配置、工程结构解析到VCS编译优化和Verdi波形分析技巧,提供了实战性强的调试方法和性能优化策略,帮助工程师高效完成数字IC验证工作。

weixin_42531163的博客 416

设计模式 - 抽象工厂模式案例

抽象工厂模式适用的环境,抽象工厂模式vs工厂方法模式,产品等级结构和产品族的概念,模式结构的4个角色,抽象工厂模式案例及代码:计算机包含内存(RAM),CPU等硬件设备,根据如图所示的“产品等级结构-产品族示意图”,使用抽象工厂模式实现计算机设备创建过程并绘制类图

qq_48457459的博客 7294

【RT-DETR涨点改进】独家创新改进篇 | AAAI2024 | RT-DETR引入CFBlock增强对长程依赖和全局语义信息的建模能力,有助于提升复杂场景下小目标、遮挡目标的检测精度

本文给大家介绍在RT-DETR中引入CFBlock模块,能够有效提升模型对长程依赖和全局语义信息的建模能力,在保持轻量化和高效推理的基础上增强特征表达力,特别有助于提升复杂场景下小目标、遮挡目标的检测精度,从而实现更优的精度与速度平衡。

Ai缝合怪、助力小伙伴高效发论文 260

抽象工厂模式举例

在客户端中,通过创建具体工厂对象并调用其创建产品的方法,可以获取到具体的产品对象。由于客户端只依赖产品的抽象类而不依赖具体的产品类,因此可以很方便地进行扩展和修改。可以保证产品的一致性:一个工厂只负责生产同一产品族中的产品,保证所有产品都具有相同的风格和特点。具有良好的扩展性:当需要增加新的产品族时,只需要增加一个新的具体工厂类,不需要修改原来的代码。简单易用:客户端不需要知道具体产品类的名称,只需要知道所需产品的抽象类即可。定义了两个创建产品的方法,分别对应两个产品族中的产品。实现了具体的产品行为。

人工智能全栈工程师 | 智能算法研发与实战落地​专注于人工智能算法研究、代码实现与工程落地,提供从模型设计到部署应用的全流程解决方案。 440

专栏二十:如何选择你的单细胞亚群的分辨率--ROGUE

ROGUE这是继chooseR后第二个计算单细胞亚群分辨率的内容,其实关于代码的运行很简单,网上已经有不少教程,重复这些就没意思了,这里主要是结合探讨一下这个算法。

m0_58549466的博客 981

【置顶】TEE从入门到精通-[目录]

此专栏讲解包含不限于optee、商用TEE、常规的安全业务设计。但主要基于optee最新代码,深度讲解和剖析各项原理和机制...

baron-周贺贺-代码改变世界ctw 6426

Java GoF 23种设计模式-创建型模式-抽象工厂模式(Abstract Factory Pattern)

文章目录一、模式定义二、模式动机三、模式结构四、代码实现4.1 Sender产品及其实现4.2 Logger产品及其实现4.3 工厂类及其实现4.4 测试及运行结果 一、模式定义 抽象工厂模式(Abstract Factory Pattern):提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类。抽象工厂模式又称为Kit模式,属于创建型模式。 抽象工厂模式是所有形式的工厂模式中最为抽象和最具一般性的一种形态。 抽象工厂模式与工厂方法模式最大的区别在于: 工厂方法模式: 一个抽象产品类,可

WU4566285的博客 444

华为OD机试真题 C 实现【水库蓄水问题】【2022.11 Q4 新题】

给定一个长度为 n 的整数数组height。数组的元素表示山的高度,选择两个元素作为水库的边界,求蓄水量的最大值并输出蓄水量最大时的边界下标(蓄水量相同时输出下标较近的)。

MISAYAONE的博客 1万+

使用Go实现GoF的23种设计模式(一)

前言 从1995年GoF提出23种设计模式到现在,25年过去了,设计模式依旧是软件领域的热门话题。在当下,如果你不会一点设计模式,都不好意思说自己是一个合格的程序员。设计模式通常被定义为: 设计模式(Design Pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结,使用设计模式是为了可重用代码、让代码更容易被他人理解并且保证代码可靠性。 从定义上看,设计模式其实是一种经验的总结,是针对特定问题的简洁而优雅的解决方案。既然是经验总结,那么学习设计模式最直接的好处就在于可以站

ruanrunxue的博客 1617

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

设计模式(三)创建型:抽象工厂模式详解

抽象工厂是构建“可配置系统”的核心模式。在现代架构中,其思想已演进为“依赖注入容器”(如 Spring Context)、“服务定位器”或“配置驱动工厂”。

谦与谦寻的神隐 654

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

设计模式之抽象工厂模式(Abstract Factory)摘录

设计模式之抽象工厂模式(Abstract Factory)

网络资源是无限的 2550

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

java设计模式(4)

GOF23种设计模式是非常经典的模式总结,大量应用于各种变成领域。下面列举下23种设计模式以及常见的设计模式。 创建型 1.Factory Method(工厂方法) 2. Abstract Factory(抽象工厂) 3. Builder(建造者) 4. Prototype(原型) 5. Singleton(单例) 结构型 6. Adapter Class/Object(适配器) 7. Bridg...

zhaoyouliang123的博客 213

第十四章 设计模式(2)

14.3 GOF设计模式及其应用 设计模式的定义为:模式是在一个上下文中,对一个问题的解决方案,GOF提出了模式的4要素,既模式名称、问题解决方案和效果 (1)模式名称(Pattern Name) 一个助记词,使用一两个描述模式问题,解决方案和效果。设计模式允许在较高抽象层次上进行设计,增添了设计词汇,可在书写文档时使用模式名 (2)问题(Problem) 描述了模式使用的场合和条件,描述设计的特定问题,解释设计问题存在的原因,描述导致不灵活设计的类或对象结构,有时还包含了模式应用必须满足的一系列

zhhzc的博客 1199

设计模式之-创建型

                    设计模式之-创建型                            GOF的23种设计模设可以分为三大类,创建型,结构型,行为型. 定义        所谓创建型模式,就是处理类或者对象创建的设计模式,试图根据实际情况使用合适的方式创建类和对象。基本的类和对象的创建方式可能会导致设计和维护上的问题,或增加了设计的复杂度。创建型模式通过以某种方式...

weixin_34375251的博客 82

六、GoF之工厂模式

六、GoF之工厂模式

既来之的博客 467

【设计模式】工厂模式(简单工厂模式、工厂方法模式、抽象工厂模式)详记

简单工厂模式(Simple Factory Pattern):又称为静态工厂方法(Static Factory Method)模式,它属于类创建型模式。在简单工厂模式中,可以根据参数的不同返回不同类的实例。简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。工厂方法模式(Factory Method Pattern)又称为工厂模式,也叫虚拟构造器(Virtual Constructor)模式或者多态工厂(Polymorphic Factory)模式,它属于类创建型模式。

Etui۹(・༥・´)و的博客 1150

uml抽象工厂模式java_抽象工厂模式-Java设计模式笔记(三) | 六阿哥博客

抽象工厂模式提供一个创建一系列相关或相互依赖对象的接口,无需指定它们具体的类。属于创建型,也属于GOF23种设计模式。适用范围1.客户端(应用层)不依赖于产品类实例如何被创建、实现等细节。2.强调一系列相关的产品对象(属于同一产品族)一起使用创建对象需要大量重复的代码。3.提供一个产品类的库,所有的产品以同样的接口出现,从而使客户端不依赖于具体实现。优缺点优点:具体产品在应用层代码隔离,无需关心创...

weixin_29335033的博客 185

1.设计模式_01_创建型设计模式

本文摘要总结了GoF设计模式中的单例模式和工厂模式。单例模式确保类只有一个实例,分为饿汉式(类加载时创建)和懒汉式(使用时创建),后者需处理线程安全问题。工厂模式解决对象创建问题,包括简单工厂模式(静态工厂方法)、工厂方法模式和抽象工厂模式。简单工厂模式通过工厂类集中创建对象,实现生产消费分离,但不符开闭原则。文中提供了Java代码示例,展示单例模式的线程安全实现和工厂模式的产品角色设计。

u011488477的博客 1008

23种设计模式之创建型模式(单例、工厂方法、抽象工厂、生成器和原型模式)

概述 设计模式是针对某一类问题的最优解决方案,是从许多优秀的软件系统中总结出的。 Java中设计模式(java design patterns)通常有23种。 模式可以分成3类:创建型、行为型和结构型。 创建型模式 创建型模式涉及对象的实例化,特点是不让用户代码依赖于对象的创建或排列方式,避免用户直接使用new创建对象。 创建型模式有以下5个: 工厂方法模式、抽象工厂方法模式、生成器模式、原型模式和单例模式。 行为型模式 ...

qq_41469636的博客 1133
上一篇: GoF23种设计模式之创建型模式之原型模式
下一篇: GoF23种设计模式之创建型模式之建造者模式
innovation
博客等级 码龄14年 251粉丝 136原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值