(2)设计模式之工厂方法模式(创建型模式)

Cisco思科 电子科技大学计算机网络 SRWE 期末技能考试 (PTSA) 电子科技大学2024春_SRWE_计算机网络系统 SRWE 期末技能考试 (PTSA) 阅读详情

声明:以下都是博主浅薄的经验之谈,欢迎大家学习交流


(1)设计模式之简单工厂模式(创建型模式)存在着一个缺点不符合设计模式的封闭原则:当需要创建的对象多了的话,需要不断的去动内部的代码。于是工厂方法模式就诞生了。先上类图
这里写图片描述

  • Fruit.java
public interface Fruit {
    public void collect();
}
  • Apple.java
public class Apple implements Fruit{
    @Override
    public void collect() {
        System.out.println("采集苹果..");
    }

}
  • Banana.java
public class Banana implements Fruit {

    @Override
    public void collect() {
        System.out.println("采集香蕉..");
    }

}
  • FruitFactory.java
package com.dyx.design.factorymethod;

public interface FruitFactory {
    public Fruit productionFruit();
}
  • AppleFactory.java
package com.dyx.design.factorymethod;
/**
 * 描述:水果工厂
 */
public class AppleFactory implements FruitFactory {
    @Override
    public Fruit productionFruit() {
        return new Apple();
    }

}
  • BananaFactory.java
package com.dyx.design.factorymethod;

public class BananaFactory implements FruitFactory {
    @Override
    public Fruit productionFruit() {
        return new Banana();
    }

}
  • Main.java
package com.dyx.design.factorymethod;
/**
 * 描述: 工厂方法模式
 *      工厂方法退化后可以演变成简单工厂模式
 */
public class Main {

    public static void main(String[] args) {
        AppleFactory aFactory = new AppleFactory();
        Fruit aFruit = aFactory.productionFruit();
        aFruit.collect();

        BananaFactory bFactory = new BananaFactory();
        Fruit bFruit = bFactory.productionFruit();
        bFruit.collect();
        //后期如果要添加新水果类的话,按如下步骤来:
        //1.添加一个实现Fruit的接口类
        //2.添加一个生产你要的水果工厂
        //嘿嘿,到这边知道这个模式的好处了吧,是不是不动原先的代码。通过添加类就实现功能呢
        //(耦合度是不是降低了呢?)
    }

}

欢迎留言交流!!


VS2019配置Qt5.14.2开发环境全流程(含MSVC2017 64-bit选择指南) 本文详细介绍了在VS2019中配置Qt5.14.2开发环境的完整流程,特别针对MSVC2017 64-bit编译器的选择提供了专业建议。从环境准备、Qt安装配置到VS2019集成设置,逐步指导开发者完成开发环境的搭建,并提供了常见问题的解决方案和高级优化技巧,帮助开发者高效进行Qt开发。 阅读详情

相关推荐

AB相增量式编码器以及STM32定时器编码器模式测速/测距离(HAL库)

编码器(Encoder)是一种用于测量旋转运动或位置的设备。编码器通常与定时器模块一起使用,以便在微控制器中获取和计算旋转的脉冲数量,从而确定物体的运动方向和距离。编码器在许多应用中都很有用,例如机器人运动控制、电机位置反馈和位置传感。STM32微控制器提供了多种类型的编码器支持,其中一种常见的编码器类型是增量编码器。增量编码器基于两个脉冲信号通道,通常称为A相和B相。当旋转发生时,这两个信号通道的相位关系会发生变化,从而可以计算出旋转方向和旋转的步数。

嵌入式软件工程师的博客 1万+

跟着实例学习设计模式(3)-工厂方法(创建型)

工厂方法属于创建型设计模式。 设计意图:定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到其子类。        静态工厂使用面向对象的方式,有效的解决了增加新产品给客户端和实现类带来的代码修改问题,封装了创建过程,减低了增加新产品带来的代码修改错误,但是新增功能需要修改客户端代码和工厂创建类的判断逻辑,这样的设计违背了开放-封闭原则,对扩展开放,对修改封

沉默 971

记录一次PowerJob使用达梦数据库的配置

记录一次PowerJob使用达梦数据库的配置

早晨阳光一般暖的博客 2159

设计模式学习笔记(2)——创建型——工厂方法模式

工厂方法模式(Factory Method Pattern)定义一个创建产品对象的工厂接口,将产品对象的实际创建工作推迟到具体子工厂类当中。这满足创建型模式中所要求的“创建与使用相分离”的特点。 优点: 用户只需要知道具体工厂的名称就可得到所要的产品,无须知道产品的具体创建过程; 在系统增加新的产品时只需要添加具体产品类和对应的具体工厂类,无须对原工厂进行任何修改,满足开闭原则; 缺点: 每增加一个产品,就要新增一个对应的工厂类和产品类,增加系统的复杂度 角色: 抽象工厂(Abstract Fac

qq_18846873的博客 248

Verilog使用inout信号的方法

在FPGA的设计过程中,有时候会遇到双向信号(既能作为输出,也能作为输入的信号叫双向信号)。比如,IIC总线中的SDA信号就是一个双向信号,QSPI Flash的四线操作的时候四根信号线均为双向信号。在Verilog中用关键字inout定义双向信号,这里总结一下双向信号的处理方法。  实际上,双向信号的本质是由一个三态门组成的,三态门...

qq_41687938的博客 1万+

玩转Matlab-Simscape(初级)-01-从一个简单模型开始学习之旅

本文从初学者的角度分享的关于Matlab simscape 的基础内容,简单分享了Simscape搭建模型,创建子系统,修改定义参数等内容,为将来深入学习和使用simscape做铺垫。

万金油笑匠的博客 6520

设计模式之工厂方法模式(创建型)

一、模式定义 工厂方法模式:又称工厂模式,也叫虚拟构造器模式,属于构建型设计模式,工厂方法模式是在简单工厂模式上进行拓展,生产产品的过程由具体工厂类实现,基类只实现接口,这使得工厂方法模式可以在不修改工厂角色的情况下,引进新的产品。 工作方法模式也符合”开闭原则“。工厂方法模式也称虚拟构造器(Virtual Constructor)模式或者多态工厂(Polymorphic Factory)模式 二...

Nicky's blog 3523

一文详细讲解CRM系统(附架构图、流程、功能介绍)

专为中小企业量身打造高性价比的数字化转型路径!企业如何用CRM才能真正做到降本增效?今天,就用一文讲清这些问题!读完本文,你将清楚得了解CRM的概念、框架、流程、功能、企业成功案例,文末还有常见问题解答。

Dabeishandong的博客 9930

【XAI】透视深度学习:CNN与Transformer的可解释性方法

深度学习模型的可解释性方法解析:本文探讨了CNN和Transformer两类主流模型的可解释性技术。针对CNN,介绍了显著性图、类激活图(CAM/Grad-CAM)和基于扰动的方法,通过可视化重要像素区域揭示决策依据。对于Transformer,重点分析了注意力机制可视化及其在文本处理中的应用,并介绍了积分梯度等归因方法。文章包含详细的Python实现示例(使用Captum库),涵盖从MNIST图像显著性分析到BERT文本注意力可视化,为初学者提供了可操作的技术指南。这些方法有助于增强模型透明度,提升AI系

u012133341的博客 382

Cadence PCB仿真 使用Allegro PCB SI为BRD文件创建通用型IBIS模型的方法图文教程

本文简单介绍使用Allegro PCB SI软件为BRD PCB设计文件中的元器件创建IBIS模型的方法。

fydar的博客 2169

案例分析工厂设计模式(简单-复杂-抽象)

浅谈工厂设计模式--本次试验将工厂模式分为三个层次(简单工厂模式、复杂工厂模式、抽象工厂模式),并各自讲解联系,由浅到深。 工厂模式出现的情况类似如下情况: 现有类A、B、C、D,D中有方法d 此后分别在A、B、C中实例化D对象并调用d()方法 此时考虑如下情况:如果出现功能类似D的类E,并打算用E的e()取代d()方法,那么我们就需要在A、B、C、中分别修改D对象和d()方法为E对象和e

WJL_MGQS的专栏 2365

机器人视觉仿真软件:PCL (Point Cloud Library)_(8).点云分割技术

点云分割技术在机器人视觉处理中起着至关重要的作用,通过不同的分割方法可以有效地将点云数据中的不同物体或区域分离出来。PCL提供了丰富的分割算法,包括基于平面的分割、基于聚类的分割、基于模型的分割和基于条件的分割等。每种方法都有其适用的场景和优缺点,选择合适的方法可以显著提高点云处理的效率和准确性。希望本节的内容能够帮助读者更好地理解和应用点云分割技术。

kkchenjj的博客 822

23种设计模式(2)_创建型_工厂方法模式(Factory Method Pattern)

定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到其子类。首先需要说一下工厂模式。工厂模式根据抽象程度的不同分为三种:简单工厂模式(也叫静态工厂模式)、本文所讲述的工厂方法模式、以及抽象工厂模式。工厂模式是编程中经常用到的一种模式。它的主要优点有:可以使代码结构清晰,有效地封装变化。在编程中,产品类的实例化有时候是比较复杂和多变的,通过工厂模式,将产品的实例化封装起来,使得调用者根本无需关心产品的实例化过程,只需依赖工厂即可得到自己想要的产品。对调用者屏蔽具体的产品类。如果

heyuchang666的专栏 726

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

【设计模式深度剖析】【2】【创建型】【工厂方法模式】

定义一个用于创建对象的接口,让子类决定实例化哪个类。工厂方法使一个类的实例化延迟到其子类。

浣花御劍 1152

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

【c++设计模式04】创建型2:工厂方法模式(Factory Pattern)

简单工厂模式的优点是易于理解和实现,客户端只需要与工厂类进行交互,而不需要直接与具体产品类打交道。当需要添加新的产品类时,只需要修改工厂类即可,符合开闭原则。缺点是随着产品类的增加,工厂类的代码逻辑会变得越来越复杂,违反了单一职责原则。总结来说,工厂模式和简单工厂模式都是用于对象的创建,提供了一种封装对象创建过程的方式,使得客户端与具体对象的创建解耦。而简单工厂模式是工厂模式的一种简单形式,适用于对象较少且创建逻辑相对简单的情况。

junxuezheng的博客 907

设计模式2——创建型模式之工厂方法模式

定义:工厂方法模式(FactoryMethod Pattern),定义一个用于创建对象的接口,让子类决定实例化哪一个类。定义一个抽象工厂类,每一个产品,按照抽象工厂的基本要求新建一个工厂来生产新的产品。 类型:创建型模式。 类图: 参与角色: AbstrctProduct,提供产品生产的标准接口。 ConcreteProductA,ConcreteProd

飞鹤的程序员人生 899

【设计模式】(六)--创建型模式--工厂模式2工厂方法模式

【设计模式】(五)–创建型模式–工厂模式2工厂方法模式 工厂方法模式【设计模式】(五)--创建型模式--工厂模式2工厂方法模式工厂方法模式的简单实现 工厂方法模式的简单实现 类图 实现 public interface Fruit { void showTaste(); } public class Apple implements Fruit { @Override ...

lovesunren的专栏 205

设计模式之创建型(2)-工厂方法模式

设计模式之创建型(2)-工厂方法模式 设计模式之创建型(2)-工厂方法模式 posted @ 2014-05-29 00:00 李华丽 阅读(...) 评论(...) 编辑 收藏 ...

LHL62411570的专栏 161

GO设计模式——2、工厂方法模式(创建型)

工厂方法模式(Factory Method Pattern)又叫作多态性工厂模式,指的是定义一个创建对象的接口,但由实现这个接口的工厂类来决定实例化哪个产品类,工厂方法把类的实例化推迟到子类中进行。在工厂方法模式中,不再由单一的工厂类生产产品,而是由工厂类的子类实现具体产品的创建。因此,当增加一个产品时,只需增加一个相应的工厂类的子类, 以解决简单工厂生产太多产品时导致其内部代码臃肿(switch … case分支过多)的问题。工厂方法模式在Go语言中有着广泛的应用,例如在数据库访问消息队列。

Gloming__zxy的博客 658

C++设计模式实战(2)——创建型设计模式(2)——工厂方法模式

1.示例: 场景: 代码: #include <iostream> #include <string> using namespace std; class ExportFileAPI { public: virtual bool exportData(string data) = 0; protected: ExportFileAPI(){} }; ...

波波鱼的博客 295

【设计模式】【创建型5-2】【工厂方法模式】

对数据库的操作基本都是一致的。但是数据库的产品是不一样的,mysql oracle ,可以考虑工厂方法。:定义工厂方法所创建的对象的接口。:声明工厂方法,返回一个产品对象。:实现工厂方法,返回具体产品实例。产品 具体的产品,工厂 具体的工厂。:实现产品接口的具体类。

SHI_IHS的博客 555

c#设计模式2——创建型模式_工厂方法模式

1、抽象工厂模式(Abstract Factory Pattern): 是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 2、 优点:一个产品族中的多个对象被设计成一起工作时,它能保证客户端始终只使用同一个产品族中的对象(将一个系列的产品统一一起创建); 缺点: 产品族扩展非常困难,要增加一个系列的某一产品,既要修改工厂抽象类里加代码,又修改具体的实现类里面加代码; 增加了系统的抽象性和理解难度; 3、适用场景: 一系列相关产

mlxg99999的博客 253

【设计模式】—-(2)工厂方法模式(创建型)

一 、工厂方法(Factory Method)模式 工厂方法模式的意义是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中。核心工厂类不再负责产品的创建,这样核心类成为一个抽象工厂角色,仅负责具体工厂子类必须实现的接口,这样进一步抽象化的好处是使得工厂方法模式可以使系统在不修改具体工厂角色的情况下引进新的产品。 二、 工厂方法模式角色与结构 抽象工厂(Creator)角色:是工厂方

你只管努力, 892

设计模式之创建型模式—— 1.2 工厂方法模式

<?php /** *1.2工厂方法模式 *解决的问题: * 如何解决多个类实例化对象的问题。 * *解决的方案: * 定义一个用于创建对象的接口,让子类决定 * 实例化哪一个类。工厂方法使一个类的实例 * 化延迟到其子类。 * *该模式包含四种角色: * 1.抽象产品角色(一个) * ...

weixin_34096182的博客 73

Java设计模式(2)创建型:工厂模式(工厂方法模式与抽象工厂模式)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.youkuaiyun.com/zeping891103/article/details/53743194 工厂模式属于创建型设计模式,包括工厂方法模式和抽象工厂模式。凡是出现了大量的对象需要创建,并且具有共同...

chongfeng2994的博客 102
上一篇: (1)设计模式之简单工厂模式(创建型模式)
下一篇: (3)设计模式之抽象工厂模式(创建型模式)
yi博说
博客等级 码龄11年 20粉丝 30原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值