深度学习设计模式之工厂方法模式

news2024/11/24 19:51:06

文章目录

  • 前言
  • 一、工厂方法模式介绍
  • 二、详细分析
    • 1.核心组成
    • 2.实现步骤
    • 3.示例代码
    • 4.优缺点
      • 优点
      • 缺点
    • 5.应用场景
  • 总结


前言

本篇文章主要学习工厂方法模式,工厂方法模式是对简单工厂模式进一步的抽象,由子类去决定实例化哪个类。


一、工厂方法模式介绍

工厂方法模式是简单工厂模式进一步的抽象,可以不修改代码的情况下引进新的产品,解决了简单工厂违背开闭原则的问题。通过工厂父类定义负责创建的公共接口,通过子类来确定所需创建的类型,将类的实例化延迟到子类工厂中完成,由子类决定实例化哪一个类。

二、详细分析

1.核心组成

  • IProduct:抽象产品类,描述所有实例,共有的公共接口;
  • Product:具体产品类,实现抽象产品类的接口,工厂类创建的对象,如果有多个产品,则需要定义多个产品类;
  • IFactory:抽象工厂类,描述具体工厂的公共接口;
  • Factory:具体工场类,实现创建产品类对象,实现抽象工厂类的接口,如果有多个产品类,则需要定义多个产品工厂类;

在这里插入图片描述

2.实现步骤

  1. 创建抽象产品类 ,定义具体产品的公共接口;
  2. 创建抽象工厂类,定义具体工厂的公共接口;
  3. 创建具体产品类(实现抽象产品类),定义生产的具体产品;
  4. 创建具体工厂类(实现抽象工厂类),定义创建对应具体产品实例的方法;
  5. 外界通过调用具体工厂类的方法,从而创建不同具体产品类的实例。

3.示例代码

抽象产品类:

/**
 * 抽象产品类
 */
public interface Pay {

    /**
     * 统一支付
     */
    void UnifiedPay();

}

抽象工厂类:

/**
 * 抽象产品工厂类
 */
public interface PayFactory {

    Pay getPay();

}

具体产品类:

/**
 * 具体产品类
 */
public class WechatPay implements Pay{
    @Override
    public void UnifiedPay() {
        System.out.println("微信支付");
    }
}
/**
 * 具体产品类
 */
public class AliPay implements Pay{
    @Override
    public void UnifiedPay() {
        System.out.println("支付宝支付");
    }
}

具体工厂类:

/**
 * 具体工厂类
 */
public class WechatPayFactory implements PayFactory{
    @Override
    public Pay getPay() {
        return new WechatPay();
    }
}

/**
 * 具体工厂类
 */
public class AliPayFactory implements PayFactory{
    @Override
    public Pay getPay() {
        return new AliPay();
    }
}

测试类:

/**
 * 工厂方法测试类
 */
public class FactoryMethodTest {

    public static void main(String[] args) {
        WechatPayFactory wechatPayFactory = new WechatPayFactory();
        Pay wechatPay= wechatPayFactory.getPay();
        wechatPay.UnifiedPay();
    }

}

结果:
在这里插入图片描述

4.优缺点

优点

  • 符合开闭原则,增加一个产品类,只需要实现其产品类和具体的工厂类即可;
  • 符合单一职责原则,每个工厂只负责生产其对应产品。

缺点

  • 增加一个产品就需要增加具体的产品类和工厂类,系统类的个数会增加,提高维护成本,同时代码编译的时候影响效率;
  • 一个具体的工厂,只能创建一种具体的产品。

5.应用场景

  • 当一个类不知道它所需要的对象的类时;
  • 当一个类希望通过其子类来指定创建对象时。

总结

本文主要对工厂方法模式进行分析介绍。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1678925.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

摆脱手工录入烦恼,OCR技术大幅提高增值税发票处理效率

最近,我邂逅了一位得力助手——OCR技术,它犹如一位神通广大的魔法师,为增值税发票处理带来了翻天覆地的变革! 曾几何时,处理增值税发票如同走进了一片迷雾重重的森林,每一步都小心翼翼,生怕出错…

深化市场布局与产业链整合,三清互联以创新为公司发展赋能

近年来,我国大力发展现代化电力体系,并不断推进智能电网的发展,电力物联网作为支撑电力行业数字化发展的关键基础设施,迎来了快速发展黄金时期。作为电力物联网领域领先企业之一,三清互联凭借敏锐的市场洞察力和技术创…

Canal解决select count(*)执行慢的问题

前言 count 的常用方式,使用 count(*)来统计数据条数,但是 innodb 没有存储数据总数,所以执行起来就会很慢。 可以使用 expalin sql 来返回预估行数,expalin select count(*)....., 通过预估的方式,统计数据条数。可以使用 redi…

第十四届蓝桥杯大赛软件赛国赛C/C++ 大学 B 组 数三角

//枚举顶点。 //不存在等边三角形 #include<bits/stdc.h> using namespace std; #define int long long const int n2e311; int a,b,c,l[n],r[n]; signed main() {ios::sync_with_stdio(false);cin.tie(0),cout.tie(0);cin>>a;for(int i1;i<a;i){cin>>…

好烦啊,我真的不想写增删改查了!

大家好&#xff0c;我是程序员鱼皮。 很想吐槽&#xff1a;我真的不想写增删改查这种重复代码了&#xff01; 大学刚做项目的时候&#xff0c;就在写增删改查&#xff0c;万万没想到 7 年后&#xff0c;还在和增删改查打交道。因为增删改查是任何项目的基础功能&#xff0c;每…

PCB笔记(二十六):PCB检查

前言 首先检查元器件是否100&#xff05; 放置 文章目录 1、打开DRC2、database check3、检查DRC4、检查多余的线5、其他需要注意的点a.检查差分线、等长线是否已调好b.注意检查晶振、电感等元件上/下方是否其他线经过&#xff08;一般不允许线经过&#xff09;c.打开place_bo…

Leecode热题100---11:盛最多水的容器

题目&#xff1a; 给定一个长度为 n 的整数数组 height 。有 n 条垂线&#xff0c;第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线&#xff0c;使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 说明&#xff1a;你不能倾…

Markdown 高级表格控制 ∈ Markdown 使用笔记

文章目录 Part.I IntroductionPart.II 表格样式控制Chap.I 对齐方式Chap.II 表格中文本控制Chap.III 单元格合并Chap.IV 颜色控制 Part.III 实用技巧Chap.I Excel 转 HTML Reference Part.I Introduction 本文是 Markdown 使用笔记 的子博客&#xff0c;将介绍如何优雅地使用 …

【Android踩坑】重写onClick方法时,显示Method does not override method from its supperclass

问题 重写onClick方法时&#xff0c;显示Method does not override method from its supperclass 解决 在类上加implements View.OnClickListener

webpack优化构建速度示例-externals:

externals 配置项主要用于防止将某些 import 的包&#xff08;package&#xff09;打包到 bundle 中&#xff0c;而是在运行时&#xff08;runtime&#xff09;再从外部获取这些扩展依赖&#xff08;external dependencies&#xff09;。这样做的主要目的是为了解决打包文件过大…

使用JasperReport工具,生成报表模版,及通过JavaBean传参,常见问题及建议

1.下载JasperReport工具 下载地址:社区版 - Jaspersoft 社区 邮箱:lorettepatri.ckoa5434gmail.com 密码:Zx123456. 2.工具使用方法注意 1.一次参数需要在左下角Parameters中新建,直接拖转右上角的TextField不会自动新建参数,到头来还是要在Parameters中新建 2.循环参数需…

深度解析 Spring 源码:解密AOP切点和通知的实现机制

文章目录 深度解析 Spring 源码&#xff1a;解密AOP切点和通知的实现机制一、Spring AOP的基础知识1.1 AOP的核心概念&#xff1a;切点、通知、切面等1.2 Spring AOP与传统AOP的区别和优势 二、深入分析切点和通知的实现2.1 研究 Pointcut 接口及其实现类2.1.1 Pointcut 接口2.…

提升用户体验:Xinstall免邀请码功能详解

在移动互联网时代&#xff0c;App的推广和运营显得尤为重要。然而&#xff0c;传统的App推广方式往往需要用户填写繁琐的邀请码&#xff0c;这不仅降低了用户体验&#xff0c;还影响了推广效果。幸运的是&#xff0c;Xinstall作为国内专业的App全渠道统计服务商&#xff0c;推出…

GPT4 是如何将文本 token 化的?

本文给出一个 GPT4 模型可视化token的工具网站&#xff0c;大家可以去上面测试一下效果。 网址&#xff1a; https://platform.openai.com/tokenizer 使用说明 通过该网站工具&#xff0c;你可以了解一段文本如何被GPT-4模型token化的&#xff0c;以及文本的被token化之后的…

图文教程 | 2024年IDEA安装使用、破解教程,JDK简易下载方法

前言 &#x1f4e2;博客主页&#xff1a;程序源⠀-CSDN博客 &#x1f4e2;欢迎点赞&#x1f44d;收藏⭐留言&#x1f4dd;如有错误敬请指正&#xff01; 目录 一、IDEA安装 二、激活 三、JDK安装 四、JDK环境配置 五、验证 一、IDEA安装 进入官网下载&#xff1a; Other…

丑萌的黏土滤镜爆火,这款APP冲到了排行榜第一

你最近是否在社交软件上看到过黏土风格图片呢&#xff1f;突出的面部线条&#xff0c;宛如橡皮一样富有弹性的质感&#xff0c;不少人都用自己的照片或者一些出名表情包进行了恶搞。而掀起这股风潮的&#xff0c;就是一款Remini的AI修图软件。 聊起AI作图&#xff0c;相信不少人…

使用TerraScan静态扫描KubernetsIaC文件

terrascan https://github.com/tenable/terrascan Terrascan 是基础架构即代码的静态代码分析器。Terrascan 允许&#xff1a; 将基础架构作为代码无缝扫描&#xff0c;以查找错误配置。监控已配置的云基础架构&#xff0c;以查找引入终端安全评估漂移的配置更改&#xff0…

IP-GUARD如何制作授权软件

1、进入控制台 -> 找到文档安全管理 -> 点击授权软件管理 -> 导出授权软件(名称自定义) 2、打开这个蓝宝石工具,并将导出的文件进行打开 选择你要操作的软件进行编辑,然后一直下一步 3、选择要操作的软件进行编辑

【全开源】JAVA语聊大厅+陪玩系统语音聊天APP系统源码

打造全新社交娱乐体验 在数字化社交的浪潮中&#xff0c;人们渴望找到一种既能畅聊又能共享娱乐的新方式。为了满足这一需求&#xff0c;我们推出了“语聊大厅陪玩系统源码”&#xff0c;这是一款集合了语音聊天与陪玩功能的综合性社交娱乐解决方案。 核心功能 语音聊天大厅…

图文成片剪辑软件,分享3个专业的工具!

在数字化时代&#xff0c;图文成片剪辑软件成为了我们创作与表达的重要工具。无论是想要制作一段引人入胜的短视频&#xff0c;还是打造一幅精美的图文海报&#xff0c;这些软件都能助你一臂之力。那么&#xff0c;图文成片剪辑软件的方法有哪些&#xff1f;又有哪些值得一试的…