我是架构师-设计模式-工厂模式--抽象工厂和工厂方法区别

简介:

上次说到简单工厂模式,然后作为简单工厂的扩展,主要是抽象工厂工厂方法

一般的UML工具图都会提供一些现成的模板,只需要导入就可以了,我用的startUML,来看看例子:

抽象工厂模式: 

抽象工厂

工厂方法模式:

工厂方法

 

我第一接触设计模式的时候,第一反应是:天呢!这是什么啊!这些人太无聊了!这有什么用啊?有啥区别呢? 

呵呵,不得不承认如果传递知识,过于只言片语确实存在过多的沟通噪音,甚至成了学习者的障碍物。 

下面,我对以上两个图做些改动,至少,先区别一下抽象工厂工厂方法。

用一个比较现实的例子:

抽象工厂:

 

 

 工厂方法: 

 上面的例子多少有些不太合理,但为了吸引您的兴趣,就适当采取点变通方式,但道理是一样的。

解读:

对比两幅图

1. 都包含了简单工厂模式

2. 两幅图,都把工厂放在了图的左侧

抽象工厂:Abstractfactory

工厂方法:Ctreaor

3. 产品对应

抽象工厂: 每一个工厂的一个方面可以产出一个类型的产品,如 非本地Fa ,只买房子,不买车是没问题的。(其中注释上税5年,是刚好买车和买房都是5年,不一定要相同条件)

工厂方法: 每个工厂,可以实现多个某种类型的多个产品,如 非本地人Fa, 要安家,是一定要买房,买车,才算安家了。只不过他们划分出你是否纳税5年了还是新来的安家。

4.少许问题

工厂方法中,有点偏差, 不过可以按照级别分。例如:

本地一级:本土

本地二级:仅有户口

非本地一级:5年以上

非本地二级:刚来的

我想表达的意思是,这个层级最好相同,便于调用。 

简述两者的应用场景

工厂方法和抽象工厂都是应用级别比较大型的系统中,本身基于简单工厂,所以大多数情况下也是面向客户端和服务端的方式调用。 

明天又要面试了。。改天再写两者的具体代码示例,和现实中的例子,以及详细场景应用。










本文转自 wws5201985 51CTO博客,原文链接:http://blog.51cto.com/yjplxq/955356,如需转载请自行联系原作者
目录
相关文章
|
9月前
|
设计模式 Java 数据库连接
【设计模式】【创建型模式】工厂方法模式(Factory Methods)
一、入门 什么是工厂方法模式? 工厂方法模式(Factory Method Pattern)是一种创建型设计模式,它定义了一个用于创建对象的接口,但由子类决定实例化哪个类。工厂方法模式使类的实例化延迟
288 16
|
存储 前端开发 调度
Flux 与传统的 MVC 架构模式区别
Flux是一种用于构建用户界面的架构模式,与传统的MVC架构不同,它采用单向数据流,通过Dispatcher统一管理数据的分发,Store负责存储数据和业务逻辑,View只负责展示数据,使得应用状态更加可预测和易于维护。
|
11月前
|
设计模式 Java 关系型数据库
设计模式:工厂方法模式(Factory Method)
工厂方法模式是一种创建型设计模式,通过将对象的创建延迟到子类实现解耦。其核心是抽象工厂声明工厂方法返回抽象产品,具体工厂重写该方法返回具体产品实例。适用于动态扩展产品类型、复杂创建逻辑和框架设计等场景,如日志记录器、数据库连接池等。优点包括符合开闭原则、解耦客户端与具体产品;缺点是可能增加类数量和复杂度。典型应用如Java集合框架、Spring BeanFactory等。
|
设计模式 开发者 Python
Python编程中的设计模式:工厂方法模式###
本文深入浅出地探讨了Python编程中的一种重要设计模式——工厂方法模式。通过具体案例和代码示例,我们将了解工厂方法模式的定义、应用场景、实现步骤以及其优势与潜在缺点。无论你是Python新手还是有经验的开发者,都能从本文中获得关于如何在实际项目中有效应用工厂方法模式的启发。 ###
|
设计模式 关系型数据库
「全网最细 + 实战源码案例」设计模式——工厂方法模式
简单工厂模式是一种创建型设计模式,通过一个工厂类根据传入参数创建不同类型的产品对象,也称“静态工厂方法”模式。其结构包括工厂类、产品接口和具体产品类。适用于创建对象种类较少且调用者无需关心创建细节的场景。优点是封装性强、代码复用性好;缺点是扩展性差,增加新产品时需修改工厂类代码,违反开闭原则。
228 15
|
机器学习/深度学习 弹性计算 人工智能
阿里云服务器ECS架构区别及选择参考:X86计算、ARM计算等架构介绍
在我们选购阿里云服务器的时候,云服务器架构有X86计算、ARM计算、GPU/FPGA/ASIC、弹性裸金属服务器、高性能计算可选,有的用户并不清楚他们之间有何区别,本文主要简单介绍下这些架构各自的主要性能及适用场景,以便大家了解不同类型的架构有何不同,主要特点及适用场景有哪些。
1839 10
|
机器学习/深度学习 弹性计算 人工智能
阿里云服务器架构有啥区别?X86计算、Arm、GPU异构、裸金属和高性能计算对比
阿里云ECS涵盖x86、ARM、GPU/FPGA/ASIC、弹性裸金属及高性能计算等多种架构。x86架构采用Intel/AMD处理器,适用于广泛企业级应用;ARM架构低功耗,适合容器与微服务;GPU/FPGA/ASIC专为AI、图形处理设计;弹性裸金属提供物理机性能;高性能计算则针对大规模并行计算优化。
1047 7
|
前端开发 测试技术 数据库
DDD架构中assembler和converter的区别
在 DDD 四层架构模式中,assembler 和 converter 常用于对象转换,但两者在实际项目中的使用较为随意。本文从英文释义、语义区分和模型层区分三个方面探讨了两者的区别,建议按模型层区分,即 Interface 和 Application 层使用 assembler,Infrastructure 层使用 converter,以避免混淆和随意使用。此外,将转换代码抽离为独立方法有助于保持代码整洁和可测试性。
|
4月前
|
Cloud Native Serverless API
微服务架构实战指南:从单体应用到云原生的蜕变之路
🌟蒋星熠Jaxonic,代码为舟的星际旅人。深耕微服务架构,擅以DDD拆分服务、构建高可用通信与治理体系。分享从单体到云原生的实战经验,探索技术演进的无限可能。
微服务架构实战指南:从单体应用到云原生的蜕变之路

热门文章

最新文章