GoF设计模式(二) - 抽象工厂模式

GoF设计模式——抽象工厂模式 阅读详情

前言

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

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

缺点:产品族扩展非常困难,要增加一个系列的某一产品,既要在抽象的 Creator 里加代码,又要在具体的里面加代码。

 

 示例

1. 饮料制作 

public interface Drink {

    void production();
}
public class ColaDrinkProduction implements Drink{

    @Override
    public void production() {
        System.out.println("生产可乐饮料");
    }
}
public class SpriteDrinkProduction implements Drink{

    @Override
    public void production() {
        System.out.println("生产雪碧饮料");
    }
}

2. 饮料打包

public interface Pack {

    void productPack();
}
public class ColaDrinkPack implements Pack{
    @Override
    public void productPack() {
        System.out.println("打包可乐饮料");
    }
}
public class SpriteDrinkPack implements Pack{
    @Override
    public void productPack() {
        System.out.println("打包雪碧饮料");
    }
}

3. 生产工厂

public interface ProductionFactory {
    //制作饮料
    Drink productionDrink();
    //打包饮料
    Pack packDrink();
}
public class ColaDrinkProductionFactory implements ProductionFactory {

    @Override
    public Drink productionDrink() {
        return new ColaDrinkProduction();
    }

    @Override
    public Pack packDrink() {
        return new ColaDrinkPack();
    }
}
public class SpriteDrinkProductionFactory implements ProductionFactory {

    @Override
    public Drink productionDrink() {
        return new SpriteDrinkProduction();
    }

    @Override
    public Pack packDrink() {
        return new SpriteDrinkPack();
    }
}

4. 工厂调用

ProductionFactory factory = new ColaDrinkProductionFactory();
factory.productionDrink().production();
factory.packDrink().productPack();

factory = new SpriteDrinkProductionFactory();
factory.productionDrink().production();
factory.packDrink().productPack();

5. 源码

https://download.youkuaiyun.com/download/javanbme/15985345

抽象工厂模式把开放-封闭原则,依赖倒转原则运用的很好,可以很方便地切换两个饮料生产过程的代码,但是如果你的需求来自增加功能,比如我们现在要增加发货的功能,需要增加IDrinkDeliverGoods、ColaDrinkDeliverGoods、SpriteDrinkDeliverGoods
还需要更改IProductionFactory、ColaDrinkProductionFactory和 SpriteDrinkProductionFactory 才可以完全实现。太糟糕了。

 

简单工厂模式+反射改进抽象工厂模式

1. 去掉ProductionFactory、SpriteDrinkProductionFactory、ColaDrinkProductionFactory三个工厂类 ,新增 DrinkFactory类。

  类的全限定名自行修改

public class DrinkFactory {

    public static Drink productionDrink(String type){
        String className = "com.suiyun.factory.drink." + type +"DrinkProduction";
        System.out.println(className);
        try {
            return  (Drink)Class.forName(className).newInstance();
        } catch (Exception e) {
            return null;
        }
    }

    public static Pack packDrink(String type){
        String className = "com.suiyun.factory.pack." + type +"DrinkPack";
        try {
            return  (Pack)Class.forName(className).newInstance();
        } catch (Exception e) {
            return null;
        }
    }

}

2. 工厂调用

String type = "Cola";
Drink drink = DrinkFactory.productionDrink(type);
drink.production();
Pack pack = DrinkFactory.packDrink(type);
pack.productPack();

3. 源码

https://download.youkuaiyun.com/download/javanbme/15987456

 

 

Centos7网络配置(设置固定ip) 刚安装完系统,有的人尤其没有勾选自动网络配置的情况下,是访问不了外网的,本机也连不通虚拟机。或者现在有的是动态ip,几次之后启动ip地址就变了,会导致其他软件或程序之前连接配置要重新更改,很麻烦,下面讲解一下如何配置网络,如何设置成固定ip。 阅读详情

相关推荐

数字IC物理验证实战 | 从Calibre LVS报告到Innovus定位的Debug全链路解析

本文详细解析了数字IC物理验证中Calibre LVS报告的Debug全流程,从INCORRECT NETS错误的初探到Innovus定位技巧,提供了实战案例和高效工具的使用方法。重点介绍了Calibre高亮功能、Innovus验证命令以及前后端工具联动的关键策略,帮助工程师快速定位和解决LVS问题,提升物理验证效率。

weixin_30919429的博客 127

设计模式:总结

创建型模式 抽象工厂模式 意图 提供创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。 适用性 一个系统要独立于它的产品的创建、组合和表示时。 一个系统要由多个产品系列中的一个来配置时。 当你要强调一系列相关产品对象的设计以便进行联合使用时。 当你提供一个产品类库,而只想显示它们的接口而不是实现时。 结构 参与者 AbstractFactory 声明一个创建抽象产品的操作接口。...

每一个不曾起舞的日子,都是对人生的辜负。 1211

MTK平台高效部署Qwen2.5大模型:从转换到推理全流程解析

本文详细解析了在联发科(MTK)NeuroPilot平台上高效部署Qwen2.5大模型的全流程。内容涵盖从环境搭建、模型转换、量化优化到编译部署与上机推理的完整步骤,重点分享了模型转换与模型运行的关键实践与避坑指南,旨在帮助开发者将大语言模型成功集成至移动及边缘设备。

zeta9的博客 377

设计模式之概述

设计模式之概述 设计模式(Designpattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计...

choujiao3460的博客 180

利用GBD数据库做未来疾病负担预测

最近看到一篇文献,利用GBD数据库中的数据对疾病负担的发展趋势进行预测。觉得很有趣,就抽空用R语言复盘了一下里面关键的方法。 参考文献: Changing trends in the disease burden of esophageal cancer in China from 1990 to 2017 and its predicted level in 25 years DOI: 10.1002/cam4.3775 1. 相关R包的安装 主要用到的R包有3个,一个一个讲: 1.1 Nordpred

NickyCat的博客 5万+

Tina Linux WiFi驱动移植避坑指南:以RTL8733bs为例,详解设备树、Kconfig与固件依赖

本文详细解析了在Tina Linux上移植RTL8733bs WiFi驱动的关键步骤与常见问题,涵盖设备树配置、内核依赖、固件加载及启动时序等核心环节。通过实战案例和排查清单,帮助开发者规避SDIO控制器配置、电源管理、GPIO极性等典型陷阱,确保驱动稳定运行。

weixin_29164185的博客 262

Abstract Factory(抽象工厂)--对象创建模式

Abstract Factory 抽象工厂 意图 提供一个创建一系列相关或者相互依赖的接口,而无需指定它们具体的类。 动机(Motivation) 1.在软件系统中,经常面临着“一系列相互依赖的对象”的创建工 作;同时,由于需求的变化,往往存在更多系列对象的创建工作。 2.如何应对这种变化?如何绕过常规的对象创建方法(new),提供一 种“封装机制”来避免客户程序和这种“多系列具体对象创建工作” 的紧耦合? 实用性 1.一个系统要独立于它的产品的创建、组合和表示时。 2.一个系统要由多个产品系列中的一个来配

外太空的博客 253

DFT知识点扫盲——DFT scan chain

实际在项目中synccell一般直接上ULVT,既然是SDF,就是带Scan接口的DFF,SN (set negtive)是低置位,RP(reset positive)是高复位,既没有SN也没有RP的就是无复位寄存器。1:定义:满足可测试性设计(DFT),将设计中所有的触发器连接到一条或者若干条链上,称为scan chain,将一个复杂的时序电路转换为简单的组合电路进行测试,这一步是在逻辑综合(DC)中实现。当SE=1当SI=1时,电路进入scan状态,当SI=0时,电路工作在normal状态。

笨蛋大乌龟的博客 4936

java 设计模式 抽象工厂_Java设计模式----------抽象工厂模式

1、介绍意图:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。主要解决:主要解决接口选择的问题。何时使用:系统的产品有多于一个的产品族,而系统只消费其中某一族的产品。如何解决:在一个产品族里面,定义多个产品。每个具体的工厂负责一个产品族。抽象工厂的返回值为最高级抽象产品。关键代码:在一个工厂里聚合多个同类产品(在同一个产品族中)。应用实例:举一个衣服与衣柜的例子。家里边,有男装...

weixin_33014989的博客 226

解决mamba_ssm库安装难题:两种高效方法详解

本文详细解析了mamba_ssm库安装失败的常见原因,并提供了两种高效的解决方案。针对其依赖C++/CUDA扩展编译的特性,文章手把手指导用户通过GitHub克隆源码编译安装,或寻找匹配的预编译Wheel文件直接安装,帮助开发者彻底解决环境配置难题,顺利部署Mamba模型。

weixin_29056865的博客 554

二叉树三种遍历(动态图+代码深入理解)

文章目录一、图示理解(图片是一位前辈所留,在此感谢)1、先序遍历2、中序遍历3、后序遍历4、层序遍历二、深入理解三种遍历让我们来理解一下绕着外围跑一整圈的真正含义是:遍历所有结点时,都先往左孩子走,再往右孩子走。下面做一个实例吧三、代码实现加以理解以下是C语言全部代码实现下面是同样的例子用c++实现,大家可以参考一下 一、图示理解(图片是一位前辈所留,在此感谢) 1、先序遍历 先序遍历可以想象成,...

流楚丶格念的博客 3万+

GoF之工厂模式

不属于23种设计模式之一。静态工厂方法模式(原因是其中定义的是一个static 静态的方法,进行工厂处理生产的)。简单工厂模式是工厂方法模式的一种特殊实现。第二种:工厂方法模式(Factory Method):是23种设计模式之一。第三种:抽象工厂模式(Abstract Factory):是23种设计模式之一。创建型(5个):解决对象创建问题。结构型(7个):一些类或对象组合在一起的经典结构行为型(11个):解决类或对象之间的交互问题。

weixin_61635597的博客 1470

ROCm rocr-libhsakmt分析系列9-3: queue的内核创建流程

KFD队列是用户空间与GPU通信的核心机制,通过多种队列类型(计算、DMA、调试等)实现命令流管理。核心数据结构包括描述队列属性的queue_properties、内核调度对象queue、进程级管理器process_queue_manager,以及跨进程设备的qcm_process_device等。这些结构通过ring buffer、doorbell机制和MQD硬件描述符协同工作,支持队列全生命周期管理、资源调度、异常处理和上下文保存/恢复功能。

图形/计算GPU的驱动与虚拟化技术分享园地 2129

五万字详解“GoF”的23种设计模式

大家好,我是栗筝i,近期我总结梳理了 “GoF”的 23 种设计模式,并使用 Java 对每种设计模式都进行了伪代码与 Demo 实现,并总结了每种设计模式的应用场景,优缺点,UML图等相关内容,字/词数达到了5万,希望对大家有所帮助~~

栗筝i的博客 4167

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

【Spring】GoF 之工厂模式

Spring 框架中采用的工厂模式简介

秋玄的博客 1566

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

GOF设计模式简介

1.简介 设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。 设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可...

yoyoseng的博客 873

设计模式Python版 抽象工厂模式

介绍了GOF设计模式中的抽象工厂模式,抽象工厂模式的Python示例,以及Django框架中抽象工厂模式的应用。

分享、交流、合作 2451

GoF 的 23 种设计模式

设计模式有两种分类方法:根据模式的目的来分和根据模式的作用范围 1. 根据目的来分 根据模式用来完成什么工作的来划分,这种方式可分为创建型模式、结构型模式、行为模式。 创建型模式:用于描述“怎样创建对象”,它的主要特点是“将对象的创建与使用分离”。GoF 中提供了单例、原型、工厂方法、抽象工厂、建造者等 5 种创建型模式。 结构型模式:用于描述如何将类或对象按某种布局组成更大的结构,GoF 中提供了代理、适配器、桥接、装饰、外观、享元、组合等 7 种结构型模式。 行为型模式:用于描述类或对象之间怎样相互协

guyuweilove的博客 4021

玄子Share 设计模式 GOF 全23种 + 七大设计原则

此文主要内容为,面向对象七大设计原则(OOD Principle),GOF(Gang Of Four)23种设计模式,拓展的两个设计模式,简单工厂模式(Simple Factory Pattern),空对象模式(Null Object Pattern),以及工厂模式与策略模式(Factory And Strategy Pattern)之间的区别,两个设计模式较为相似,细节上需要分清,每个设计模式都分为了八步介绍,先对设计模式进行简单介绍,尽量一句话概述,方便记忆,再以现实生活中的场景举例,抛出问题解决问题

qq_62283694的博客 3442

Java设计模式——GoF设计模式

一、GoF设计模式简介 本节内容参考《Java设计模式》@刘伟 编著,清华大学出版社出版,设计模式详解请参考原书。 1.GoF 的 23 种模式一览表 范围/目的 创建型模式 结构型模式 行为型模式 类模式 工厂方法模式 (类)适配器模式 解释器模式 模板方法模式 对象模式 抽象工厂模式 建造者模式 原型模式 单例模式 (对象)适配器模式 桥接模式 组合模式

weixin_40587145的博客 3273

设计模式精解:GoF 23种设计模式全解析

抽象工厂模式提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。

xyqqwer的博客 1548

【Go实现】实践GoF的23种设计模式:桥接模式

桥接模式将抽象部分和实现部分进行解耦,使得它们能够各自往独立的方向变化

ruanrunxue的博客 1164

23种GoF设计模式

GoF(Gang of Four)设计模式是由四位计算机科学家 Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides 合著的书籍《Design Patterns: Elements of Reusable Object-Oriented Software》中提出的设计模式

笔记 1371

GOF23种设计模式

设计模式

C/C++ 1340

java设计模式总结【23种GoF模式】

一、 设计模式的分类 根据目的分类,可分为创建型、结构型、行为型3类。 根据范围分类(模式是用于处理类还是处理对象)可分为类模式、对象模式。 GoF模式设计表 范围/目的 创建型模式 结构型模式 行为型模式 类模式 工厂方法模式 适配器模式 解释器模式、模板方法模式 对象模式 抽象工厂模式、建造者模式、原型模式、单例模式 (对象)适配器模式、桥连模式、组合模式、装饰模式、围...

qq_41534573的博客 532

[设计模式-1]23种GOF设计模式及7大原则概述

java 设计模式 原则

心流时间的博客 1421
上一篇: Mac版 Microsoft Remote Desktop 远程连接windows服务器 拷贝文件
下一篇: org.apache.commons.validator.routines.InetAddressValidator.isValidInet6Address(Ljava/lang/String;)Z
让程序飞
博客等级 码龄10年 8831粉丝 99原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

让程序飞

您的鼓励将是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值