设计模式02-抽象工厂模式

Java设计模式——抽象工厂模式 该超级工厂又称为其他工厂的工厂。这是因为抽象工厂接口中已经确定了可以被创建的产品集合,如果需要添加新产品,此时就必须去修改抽象工厂的接口,这样就涉及到抽象工厂类的以及所有子类的改变,这就违背了"开闭原则"。但是当产品种类非常多时,就会出现 大量的与之对应的工厂类,这不应该是我们所希望的。抽象工厂模式将具体产品的创建延迟到具体工厂的子类中,这样将对象的创建封装起来,可以减少客户端与具体产品类之间的依赖,从而使系统耦合度低,这样。产品等级:多个品牌下面的同种产品;产品族:一个品牌下面的所有产品;... 阅读详情

Java 抽象工厂模式


抽象工厂模式(Abstract Factory Pattern)是工厂方法模式的进一步抽象,其英文原话"Provide an interface for creating families of related or dependent objects without specifying their concrete classes",翻译,“为创建一组相关或相互依赖的对象提供一个借口,无需指定它们的具体类”。抽象工厂模式通常是用于创一族产品,并且这族产品分不同的等级;不同的具体工厂类生产不同等级的一族产品。抽象工厂模式也有四种角色:抽象工厂、具体工厂、抽象产品和具体产品,具体解释参见“Java 工厂方法模式”一文。抽象工厂模式的类图如下:



可以看到产品族包括ProductA和ProductB两种产品,每个具体工厂都能生产这两种产品,只是ConcreteFactory1生产的等级为1的族产品;ConcreteFactory2生产的是等级为2的族产品。下面以上图为模型,写一个demo,测试抽象工厂模式。

抽象工厂:AbstractFactory接口

[html]  view plain copy
  1. //抽象工厂,定义了生产族产品的方法;  
  2. public interface AbstractFactory {  
  3.     public ProductA factoryA();  
  4.     public ProductB factoryB();  
  5. }  


抽象产品:ProductA接口

[html]  view plain copy
  1. //抽象产品A定义了产品的公共方法,产品A和B属于一个产品族  
  2. public interface ProductA {  
  3.     public void method1();  
  4.     public void method2();  
  5. }  


抽象产品:ProductB接口

[html]  view plain copy
  1. //抽象产品B定义了产品的公共方法,产品A和B属于一个产品族  
  2. public interface ProductB {  
  3.     public void method1();  
  4.     public void method2();  
  5. }  


具体工厂(生产等级为2的族产品):ConcreteFactory1类

[html]  view plain copy
  1. //ConcreateFactory1是用来生产等级为1的产品A,B;  
  2. public class ConcreateFactory1 implements AbstractFactory {  
  3.   
  4.     //生产等级为1的产品A  
  5.     @Override  
  6.     public ProductA factoryA() {  
  7.         // TODO Auto-generated method stub  
  8.         return new ConcreateProductA1();  
  9.     }  
  10.   
  11.       
  12.     //生产等级为1的产品B  
  13.     @Override  
  14.     public ProductB factoryB() {  
  15.         // TODO Auto-generated method stub  
  16.         return new ConcreateProductB1();  
  17.     }  
  18.   
  19. }  


具体工厂(生产等级为1的族产品):ConcreteFactory2类
[html]  view plain copy
  1. public class ConcreateFactory2 implements AbstractFactory {  
  2.   
  3.     //生产等级为2的产品A  
  4.     @Override  
  5.     public ProductA factoryA() {  
  6.         // TODO Auto-generated method stub  
  7.         return new ConcreateProductA2();  
  8.     }  
  9.   
  10.     //生产等级为2的产品B  
  11.     @Override  
  12.     public ProductB factoryB() {  
  13.         // TODO Auto-generated method stub  
  14.         return new ConcreateProductB2();  
  15.     }  
  16. }  


具体产品(等级为1的A产品):ConcreteProductA1类

[html]  view plain copy
  1. //等级为1的具体产品A  
  2. public class ConcreateProductA1 implements ProductA {  
  3.   
  4.     @Override  
  5.     public void method1() {  
  6.         // TODO Auto-generated method stub  
  7.         System.out.println("等级为1的产品A的method1()");  
  8.     }  
  9.   
  10.     @Override  
  11.     public void method2() {  
  12.         // TODO Auto-generated method stub  
  13.         System.out.println("等级为1的产品A的method2()");  
  14.     }  
  15. }  


具体产品(等级为2的A产品):ConcreteProductA2类

[html]  view plain copy
  1. //等级为2的具体产品A  
  2. public class ConcreateProductA2 implements ProductA {  
  3.   
  4.     @Override  
  5.     public void method1() {  
  6.         // TODO Auto-generated method stub  
  7.         System.out.println("等级为2的产品A的method1()");  
  8.     }  
  9.   
  10.     @Override  
  11.     public void method2() {  
  12.         // TODO Auto-generated method stub  
  13.         System.out.println("等级为2的产品A的method2()");  
  14.     }  
  15. }  


具体产品(等级为1的B产品):ConcreteProductB1类

[html]  view plain copy
  1. //等级为1的产品B  
  2. public class ConcreateProductB1 implements ProductB{  
  3.   
  4.     @Override  
  5.     public void method1() {  
  6.         // TODO Auto-generated method stub  
  7.         System.out.println("等级为1的产品B的method1()");  
  8.     }  
  9.   
  10.     @Override  
  11.     public void method2() {  
  12.         // TODO Auto-generated method stub  
  13.         System.out.println("等级为1的产品B的method2()");  
  14.     }  
  15. }  


具体产品(等级为2的B产品):ConcreteProductB2类

[html]  view plain copy
  1. //等级为2的产品B  
  2. public class ConcreateProductB2 implements ProductB {  
  3.   
  4.     @Override  
  5.     public void method1() {  
  6.         // TODO Auto-generated method stub  
  7.         System.out.println("等级为2的产品B的method1()");  
  8.     }  
  9.   
  10.     @Override  
  11.     public void method2() {  
  12.         // TODO Auto-generated method stub  
  13.         System.out.println("等级为2的产品B的method2()");  
  14.     }  
  15. }  


运行结果:

等级为1的产品A的method1()
等级为1的产品A的method2()
等级为1的产品B的method1()
等级为1的产品B的method2()
等级为2的产品A的method1()
等级为2的产品A的method2()
等级为2的产品B的method1()
等级为2的产品B的method2()

总结:

抽象工厂模式相对于工厂方法模式来说,每个具体工厂可以生产一族产品(即多种产品);而工厂方法模式是具体工厂生产相应的具体产品,只能生产一种产品。当产品族中只有一种产品时抽象工厂模式退化成工厂方法模式。

OpenCV实战之人脸美颜美型(八)——大眼(下) 我们需要将上述描述量化表达,以r代表上述变形区域的圆的半径,X表示原始图像像素到变形圆圆心的距离,Y表示像素变形后的其距离变形圆圆心的距离,则其形状大致如下图所示。如下图所示,我们可以规定处理区域为眼睛为圆心的一个圆形,从圆心区域开始图像会放大,但该放大的比例随着距离圆心的距离而变小,直至边缘区域的放大比例为0。不过在实际图像变形操作中我们要从目标图像映射到原图,因此我们需要将X/Y调换,让X表示变形后图像的像素距离变形圆中心的距离,Y表示原图像素距离变形圆中心的距离,则其形状如下图所示。 阅读详情

相关推荐

流形优化: Manifold Optimization 的 全网最通俗版本详解 (一)

前言 之前忙于论文, 停更了很久。 接下来的一段时间,出于各种原因, 决定在优快云平台上做 最近在 混合波束成形 及 智能反射面 领域 非常常见的流形优化 (Manifold Optimization) 算法 的专题介绍。尽管目前已有了不少的中文博客, 但出于其各种弊端, 使得本篇的成文仍有其不可或缺的意义。 而如果要盘点最核心的意义, 就在于这篇是对读者的 数学能力 与 阅读理解能力 要求最低的 流形优化讲解了。 唯一参考的文献为 Manopt 工具包作者 Boumal 的 新书: An introd

B417科研笔记 2万+

Java设计模式(工厂模式)——抽象工厂模式(完整详解,附有代码+案例)

Java设计模式——抽象工厂模式(完整详解,附有代码+案例)。是一种为访问类提供一个创建一组相关或相互依赖对象的接口,且访问类无须指定所要产品的具体类就能得到同族的不同等级的产品的模式结构。同族的不同等级的产品:通俗讲就是一个综合工厂里的不同商品种类抽象工厂模式是工厂方法模式的升级版本,工厂方法模式只生产一个等级(即,同种的产品)的产品,而抽象工厂模式可生产多个等级(即,多种产品)的产品。

Java技术加油站的博客 2636

别再纠结高侧低侧了!用INA199/INA219这类集成电流检测芯片,5分钟搞定精准电流测量

本文详细解析了使用INA199/INA219等集成电流检测芯片实现精准电流测量的高效方案。通过对比传统分立元件方案,突出集成芯片在精度、温度稳定性和设计简化方面的优势,并提供硬件设计避坑指南和软件实现最佳实践,帮助开发者快速掌握电流检测技术。

weixin_42685438的博客 471

Java 抽象工厂模式

抽象工厂模式(Abstract Factory Pattern)是工厂方法模式的进一步抽象,其英文原话"Provide an interface for creating families of related or dependent objects without specifying their concrete classes",翻译,“为创建一组相关或相互依赖的对象提供一个借口,无需指定

liruikqn的专栏 2万+

用WorkBuddy和ima搭建本地知识库:从概念到实操

在AI应用普及的今天,私有知识的高效管理与调用成为痛点。RAG(检索增强生成)技术通过将外部知识库与语言模型耦合,为精准问答提供了技术底座。然而,传统RAG方案往往涉及向量数据库、文本切分等复杂环节。一种更轻量的路径应运而生:借助WorkBuddy与ima的组合,将知识收集、语义检索与智能体工作流整合,让本地知识库真正服务于日常办公和研发场景。从概念到实操,系统解析这套轻量级方案的核心逻辑与配置方法,并对比重方案适用边界,帮助读者快速搭建属于自己的AI知识助手。

weixin_32830601的博客 422

逆变器方案(工频全套)工频正弦波逆变器开发板全套设计资

逆变器方案(工频全套)工频正弦波逆变器开发板,24V-72V通用12只TO-247封装MOS管,额定输出功率6500W以下;配有触摸屏操作界面,运行数据一目了然,带市电互补UPS功能,可选择电池优先或市电有限工作,我们的开发板均从实战角度出发,让您的学习更便捷,包含全套设计资料,PCB.原理图.源代码,程序均有中文注释,MCU选用美国微芯公的PIC-8位单片机,民用数字电源首选单片机,抗干扰能力强,运行稳定。...

m0_73494033的博客 892

设计模式:抽象工厂模式(java实现)

工厂方法模式和抽象工厂模式对比工厂方法模式是一种极端情况的抽象工厂模式,而抽象工厂模式可以看成是工厂方法模式的推广。工厂方法模式用来创建一个产品的等级结构,而抽象工厂模式是用来创建多个产品的等级结构。工厂方法模式只有一个抽象产品类,而抽象工厂模式有多个抽象产品类。工厂方法模式中具体工厂类只有一个创建方法,而抽象工厂模式中具体工厂类有多个创建方法。到此,工厂模式中3种模式都学完了,那到底工厂模式的实现帮了我们什么?系统可以在不修改具体工厂角色的情况下引进新的产品。

maligebilaowang的博客 1551

ExpressLRS(ELRS)接收机技术全景:从历史演进、技术底层到产业生态全解析——上

ExpressLRS(ELRS)是一种由全球开源社区驱动的双向射频遥控链路协议栈,其接收机作为核心终端,承担信号接收解调、遥控指令解析、飞控数据交互与遥测回传等关键功能。自2018年问世以来,ELRS凭借极致性能、低成本、开放生态和强兼容性,从航模DIY方案发展为消费级无人机领域的事实标准,并逐步渗透工业级场景。 ELRS接收机采用模块化分层架构,支持2.4GHz和900MHz双频段,通过LoRa、FLRC、FSK多调制模式实现低延迟与远距离平衡。其核心技术包括自适应跳频抗干扰、TDD双向链路和极简数据包。

bother3000的博客 304

java抽象工厂模式_Java 抽象工厂模式

Java设计模式 - 抽象工厂模式抽象工厂模式是另一个创建模式。抽象工厂模式,也称为工厂的工厂,有一个工厂创建其他工厂。当使用抽象工厂模式时,我们首先使用超级工厂创建工厂,然后使用创建的工厂创建对象。例子下面的代码展示了如何使用抽象工厂模式。我们将要创建形状和打印机。对于形状,我们会有圆形,矩形和正方形。对于打印机,我们将有纸张打印机,网络打印机和屏幕打印机。对于shape,我们将创建Shape界...

weixin_34254464的博客 593

爬虫逆向:Hook 技术原理与实战

Hook 技术​(钩子技术)是一种通过拦截和修改程序执行流程的技术手段。它允许开发者在目标程序的特定位置插入自定义代码,以改变程序的默认行为或获取运行时信息。Hook 技术广泛应用于调试、逆向工程、性能分析、安全防护等领域。Hook 技术在爬虫逆向中非常有用,能够有效获取和修改目标程序的数据。通过合理使用 Hook 工具和技术,可以显著提升爬虫的效率和成功率。但使用时需注意法律和道德问题,确保行为合规。

数据知道的博客 1万+

基于simulink创建一个针对双馈异步风力发电机并网运行的仿真模型

摘要:本文详细介绍了基于Simulink的双馈异步风力发电机(DFIG)并网运行仿真建模方法。系统包含风速输入、风力机、双馈发电机、电力电子变换器、控制器和并网接口等模块,通过8个步骤完整呈现了建模流程,包括风速模拟、机械功率计算、发电机特性建模、变流器控制策略设计等关键环节。仿真可评估系统在不同风速条件下的动态响应、最大功率跟踪能力和发电效率,为风力发电系统的优化设计提供有效验证手段。模型可根据实际需求扩展环境因素和电网交互等细节,提高仿真精度。

amy_mhd的博客 334

Golang设计模式——02抽象工厂模式

package Abstract_Factory import "fmt" type Lunch interface { Cook() } type Rise struct { } func (r *Rise) Cook() { fmt.Println("it is Rise.") } type Tomato struct { } func (t *Tomato) Cook() { fmt.Println("it is Tomato.") } type LunchFactory inter

清风 1519

【QNX+Android虚拟化方案】01 - 芯片介绍

【QNX+Android虚拟化方案】01 - 芯片介绍

|~~~热爱生活、努力学习的小伙汁~~~| 2947

设计模式——抽象工厂模式02

抽象工厂介绍

qq_45178641的博客 619

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

VC中sqlite的使用

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

C++设计模式——02抽象工厂模式

#include<iostream> using namespace std; //产品1 class Product1 { public: virtual void show()=0; }; //产品2 class Product2 { public: virtual void show()=0; }; //微软的产品1 class MicroProduct1 : public Product1 { public: void show() { cout<&

qq_52553095的博客 245

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

02_23 种设计模式之《抽象工厂模式》

抽象工厂模式(Abstract Factory Pattern)是一种创建型设计模式,它提供了一种创建一系列相关或相互依赖对象的接口,而不需要指定它们的具体类。抽象工厂模式(Abstract Factory Pattern)隶属于设计模式中的创建型模式,用于产品族的构建。,而是把这个责任丢给具体的工厂类,客户端只负责对对象的调用,从而明确各个类的职责。提供一个创建一系列相互依赖对象的接口,而无需指定它们具体的类。工厂模式中的每一个形态都是针对一定问题的解决方案,抽象工厂模式可以向客户端提供一个接口,使。

2302_79752447的博客 700

假人有限元模型

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

设计模式-抽象工厂模式实例-02

一、实验目的和要求: 1. 抽象工厂模式的运用 (1)案例背景: 计算机包含内存(RAM),CPU等硬件设备 ,根据如图所示的“产品等级结构-产品族示意图”,使用抽象工厂模式实现计算机设备创建过程并绘制类图(课本105页第二题) (2)实现步骤: 根据题意,使用抽象工厂模式并画出类图,类图中应包含一个抽象工厂类AbstractFactory, PcFactory...

LYly_B的博客 2822

GOF设计模式(02)抽象工厂模式

抽象工厂模式简介 一、模式定义 1、比较权威的定义 抽象工厂模式(Abstract Factory Pattern):提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类。 抽象工厂模式又称为Kit模式,它是一种对象创建型模式。 2、对于该模式的理解 工厂方法模式中的每个工厂只生产一类产品,会导致系统中存在大量的工厂类,势必会增加系统的开销 抽象工厂是将一些相关的产品组成一个“...

stanwuc的博客 246

02设计模式之抽象工厂模式

抽象工厂主要是将工厂模式里的工厂的职责单一化,之前由一个工厂生产各种品牌的钢笔,现在由不同的工厂生产不同的钢笔,他的好处是在新增一种新的钢笔的时候,我们不需要去原来的工厂里面添加新增逻辑,只需要重新实现抽象工厂即可,这样满足工厂职责单一以及开闭原则。如下我们先定义一个钢笔Pen作为顶层对象,他有一个方法来获取当前钢笔的名称。相当于有不同的品牌,市面上有英雄牌的钢笔、派克钢笔等等,可以有很多种。创建一个抽象工厂用于后面的工厂来实现或者扩展。创建一个抽象工厂用于后面的工厂来实现或者扩展。

log4jc的博客 100

设计模式-02-抽象工厂模式

1、简介 抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类。每个生成的工厂都能按照工厂模式提供对象。 2、目的: 提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。 3、优点: 当一个产品族中的多个对象被设计成一起工作时,它能保证客户端始终只使用同一个产品族

Echo 122

【设计模式02】 抽象工厂模式

抽象工厂模式 定义:    工厂模式,只有一种工厂,而抽象工厂模式,是在工厂模式的基础上再包装一层,制造一个工厂中心的抽象类,其子类创建多个不同的工厂。 案例代码: 项目目录 |—abstract-factory-pattern |—pom.xml |—src |—main |—java |—org |—peko |—design

piano_diano的博客 118

设计模式(C#)——02抽象工厂模式

推荐阅读: 我的优快云 我的博客园 QQ群:704621321 在工厂模式中,一个工厂只能创建一种产品,但我们往往希望,一个工厂能创建一系列产品。很明显工厂模式已经不能满足我们的需求,于是出现了抽象工厂模式。 抽象工厂模式:为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类。 抽象工厂模式: 1.首先是不同产品类的抽象; 2.其次是不...

weixin_30399055的博客 66

C#设计模式02-抽象工厂模式(附源码)

抽象工厂模式是所有工厂模式中最为抽象的模式,是抽象程度最高的模式,也是最难理解的一种工厂模式。         现在举一个生活中的案例来说明抽象工厂模式,电视是我们生活中必不可说的电器,但是电视有很多厂家,海尔工厂,海信工厂,美的工厂他们都生产自己的电视(海尔电视,海信电视,美的电视)。再有冰箱,这三个厂家又可以生产自己的冰箱(海尔冰箱,海信冰箱,美的冰箱)。等等......在抽象工厂模式中,海

曹瑞鹏的博客(专注于.NET开发,Unity开发) 3092

02 设计模式-创造型模式-抽象工厂模式

抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类。每个生成的工厂都能按照工厂模式提供对象。抽象工厂模式提供了一种创建一系列相关或相互依赖对象的接口,而无需指定具体实现类。通过使用抽象工厂模式,可以将客户端与具体产品的创建过程解耦,使得客户端可以通过工厂接口来创建一族产品。

wyh106115的博客 1213

Java设计模式精讲---02抽象工厂模式

抽象工厂模式:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。简单来说,它能批量生产 “配套产品”,比如 “华为手机 + 华为耳机 + 华为平板” 这样的产品族。它还有个别名 ——Kit 模式(套件模式),形象地体现了它生产 “产品套件” 的特性。抽象工厂模式是创建 “产品族” 的利器,它让配套产品的创建更高效、更具一致性。虽然在新增产品类型时存在局限性,但在框架开发、多主题系统等场景中依然是不可替代的设计方案。掌握它,能让你的代码在处理复杂对象创建时更具扩展性与维护性。

2402_82356599的博客 388
上一篇: 设计模式01-面向对象设计的几个基本原则
下一篇: 设计模式03-适配器模式(adapter)
kingmicrosoft
博客等级 码龄14年 32粉丝 67原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值