三大工厂模式之简单工厂模式

设计模式系列详解 -- 工厂模式 设计模式持续更新 面试专栏持续更新中 海量面试资料等你拿 阅读详情

1.简单工厂模式

 

1.1含义

  • 简单工厂模式又叫静态方法模式(因为工厂类定义了一个静态方法)
  • 现实生活中,工厂是负责生产产品的;同样在设计模式中,简单工厂模式我们可以理解为负责生产对象的一个类,称为“工厂类”。

1.2模式组成

 1.3使用步骤

  • 创建抽象产品类 (具体产品类的父类)& 定义具体产品的公共接口;
  • 创建具体产品类(继承抽象产品类) & 定义生产的具体产品;
  • 创建工厂类,通过创建静态方法根据传入不同参数从而创建不同具体产品类的实例;
  • 外界通过调用工厂类的静态方法,传入不同参数从而创建不同具体产品类的实例

1.4实例介绍 

现有一个加工水果的工厂,需要加工3种水果(apple、pear、orange),运用简单工厂模式实现。

步骤1:创建抽象产品类,定义具体产品的公共接口。

abstract class Product{
    public abstract void Show();
}

步骤2. 创建具体产品类(继承抽象产品类),定义生产的具体产品。

//具体产品类A
class  ProductA extends  Product{

    @Override
    public void Show() {
        System.out.println("加工了apple");
    }
}

//具体产品类B
class  ProductB extends  Product{

    @Override
    public void Show() {
        System.out.println("加工了pear");
    }
}

//具体产品类C
class  ProductC extends  Product{

    @Override
    public void Show() {
        System.out.println("加工了orange");
    }
}

步骤3. 创建工厂类,通过创建静态方法从而根据传入不同参数创建不同具体产品类的实例。

class  Factory {
    public static Product Manufacture(String ProductName){
//工厂类里用switch语句控制生产哪种商品;
//使用者只需要调用工厂类的静态方法就可以实现产品类的实例化。
        switch (ProductName){
            case "A":
                return new ProductA();

            case "B":
                return new ProductB();

            case "C":
                return new ProductC();

            default:
                return null;

        }
    }
}

步骤4. 外界通过调用工厂类的静态方法,传入不同参数从而创建不同具体产品类的实例。

//工厂加工水果流程
public class SimpleFactoryPattern {
    public static void main(String[] args){
        Factory mFactory = new Factory();

        //客户要求加工apple
        try {
//调用工厂类的静态方法 & 传入不同参数从而创建产品实例
            mFactory.Manufacture("A").Show();
        }catch (NullPointerException e){
            System.out.println("这个工厂不能加工这个水果");
        }

        //客户要求加工pear
        try {
            mFactory.Manufacture("B").Show();
        }catch (NullPointerException e){
            System.out.println("这个工厂不能加工这个水果");
        }

        //客户要求加工orange
        try {
            mFactory.Manufacture("C").Show();
        }catch (NullPointerException e){
            System.out.println("这个工厂不能加工这个水果");
        }

        //客户要求加工banana
        try {
            mFactory.Manufacture("D").Show();
        }catch (NullPointerException e){
            System.out.println("这个工厂不能加工这个水果");
        }
    }
}

相对于我现在想要加工一下苹果,按照原来的想法是直接new一个加工苹果的工厂出来,而现在有了已经有了一个总工厂(可以加工3种水果),我可以直接去这个工厂说出我的需求,让他来帮我加工水果,我们才不管他是如何实现加工我的水果的,我只是把我的需求扔给他,剩下的交给他来完成就可以了。总之,简单工厂就是把之前我们需要亲力亲为的事情改变了,我们现在直接面向一个工厂,让他来帮我们完成事情。(其实三种工厂设计模式都是这种思路,只不过各有优缺点)

1.5简单工厂模式优点

  • 将创建实例的工作与使用实例的工作分开,使用者不必关心类对象如何创建,实现了解耦;
  • 把初始化实例时的工作放到工厂里进行,使代码更容易维护。 更符合面向对象的原则 & 面向接口编程,而不是面向实现编程。

1.6简单工厂模式缺点

  • 工厂类集中了所有实例(产品)的创建逻辑,一旦这个工厂不能正常工作,整个系统都会受到影响;
  • 不符合“开闭原则”,一旦添加新产品就不得不修改工厂类的逻辑,这样就会造成工厂逻辑过于复杂。
  • 简单工厂模式由于使用了静态工厂方法,静态方法不能被继承和重写,会造成工厂角色无法形成基于继承的等级结构。

1.7简单工厂模式应用场景

  • 客户如果只知道传入工厂类的参数,对于如何创建对象的逻辑不关心时;(如我只知道要加工苹果,即参数就为A)
  • 当工厂类负责创建的对象(具体产品)比较少时。
SWAT模型参数太多搞不定?一篇讲清如何用SWAT-CUP筛选关键敏感参数(含结果图解读) 本文详细解析了如何使用SWAT-CUP进行参数敏感性分析,帮助水文模型初学者从上百个参数中筛选出关键敏感参数。通过实际案例和结果图解读,介绍了敏感性分析的核心价值、SWAT-CUP结果界面解读方法以及参数筛选的四步实战法,显著提升模型调试效率。文章还提供了典型问题排查手册,解决敏感参数与文献不一致、率定后模型变差等常见问题。 阅读详情

相关推荐

TSMaster实战:如何用LIN总线唤醒你的汽车电子系统(附波形分析)

本文通过TSMaster工具实战解析LIN总线唤醒机制。详细介绍了LIN网络唤醒的协议要求、时序参数计算,并演示了如何在TSMaster中配置唤醒信号、捕获分析波形,以及验证休眠流程。文章结合常见问题排查,为汽车电子工程师提供了从理论到实践的完整调试指南。

weixin_28308325的博客 460

工厂模式C++实现(三种工厂模式附详细注释)

简单工厂模式 顾名思义,工厂是用来生产东西的,而在C++里面就是用来生产对象的。 就像一家餐厅一样,你可以按照你的方式来点餐。在工厂模式中也一样,你可以要求工厂为你生产不同的对象。 闲话不多说,直接上代码! #include<iostream> #include<string> using namespace std; class Produce;//声明产品类 class Factory;//声明工厂类 class Factory { public: Factory(){

m0_46210273的博客 4857

图神经网络实战(8)——图注意力网络(Graph Attention Networks, GAT)

图注意力网络 (Graph Attention Networks, GAT) 是对图卷积网络 (Graph Convolutional Network, GCN) 的改进,提出了一种通过自注意力 (self-attention) 过程计算的加权因子,而不是使用静态的归一化系数。在本节中,我们介绍了 GAT 架构。通过从线性变换到多头注意力的四个主要步骤,了解了 GAT 的工作原理,并在 NumPy 中从零开始构建了 GAT 层。最后,将 GAT 模型应用于 Cora 和 CiteSeer 数据集。

盼小辉丶的博客 1万+

简单工厂模式练习:简单工厂模式在农场系统中实现

简单工厂模式练习:简单工厂模式在农场系统中实现。

二十多岁的你迷茫又着急,想要车子,想要房子,想要享受旅行,你那么浮躁,拿什么看透人生! 1046

使用Transformer实现自动调制识别(RML2016a)

image_size = 128 # resize重置输入大小patch_size = 2 # 从输入图片(信号看作图片)中将被提取的块大小# 分成 num_patches 个块num_patches = (image_size // patch_size) #(72/6)**2 横着裁剪),],return x)(x1, x1)# MLP.# Add MLP.x=x_train,y=y_train,filepath,round。

QAQIknow的博客 6276

BUCK-BOOST升降压电路Multisim电路仿真分析

本文分析了三极管型BUCK-BOOST升降压开关电源的工作原理。该电路结合了BUCK降压和BOOST升压拓扑,通过控制三极管Q1的高频通断,使电感L1周期性储能和释能,实现输出电压可高于或低于输入电压且极性相反。详细阐述了Q1导通和关断阶段的工作过程,推导了输出电压与占空比的关系式Vo=-D/(1-D)*Vi,并分析了不同占空比下的工作模式(降压、升压)。通过Multisim仿真验证了理论分析,当D=25%时输出降压至1.6V,D=60%时输出升压至7.5V。电路具有升降压灵活、极性反转、效率高等特点,适用

XU157303764的博客 1436

java 3种工厂模式的快速,简易理解

[b]1.简单工厂模式(Simple Factory)[/b] 就是专门负责将大量有共同接口的类实例化,而且不必事先知道每次是要实例化哪一个类的模式。它定义一个用于创建对象的接口,由子类决定实例化哪一个类。 [code="java"] //定义水果 接口 public interface Fruit { void plantFruit(); void eatFruit(); } ...

ListenUp 389

044、镜头脏污与异物检测:产线 AOI 检测方案与 ISP 脏污补偿

文章摘要(148字) 本文针对镜头生产中的脏污检测问题,提出产线AOI检测与ISP补偿结合的解决方案。产线端采用明场、暗场、偏振三通道联合检测技术,将油污漏检率从8.3%降至0.2%。ISP端通过RAW域局部梯度分析和频域补偿算法,动态修复产线漏检的微小脏污。作者结合实战案例,详细分析了传统灰度阈值法的局限性,并给出多模态检测的代码实现要点,强调必须建立"产线拦截+终端补偿"的双重防护机制。

sundong_81的博客 229

Java常用设计模式之简单工厂模式

简单工厂模式一、简单工厂模式 一、简单工厂模式 简单工厂模式属于的创建型模式,通过专门定义一个类来负责创建其它实例化的类

. 427

【异常】飞书OpenClaw机器人 HTTP 401: Invalid Authentication 报错排查与解决方案

HTTP 401 是HTTP协议标准定义的未授权(Unauthorized)状态码,核心含义为请求方身份认证无效,服务端拒绝执行本次请求。飞书开放平台服务端对自建机器人的全链路鉴权校验失败。无论是机器人接收飞书事件推送的上行请求,还是机器人主动调用飞书开放平台API的下行请求,只要身份凭证无效、鉴权逻辑校验不通过,飞书服务端就会返回该报错,并最终透传到飞书客户端会话窗口中。

奶爸的编程之路,也就一周冷个三天 3762

基于FPGA的数字图像处理-直方图操作【3.3】

对于固定的位宽和图像分辨率来说,这个计算过程是 可定量的,也就是这个归一化系数是已知的。1.直方图累计和 根据数学定义,直方图累加和的定义是小于指定像素的所有像素 的统计值之和。在实际应用中,处理帧缓存是费时费力费资源的一件事情,在许 多情况下,图像的变换比较慢,在这种情况下的一个近似是当建立当 前帧的直方图统计结果时使用从前一帧得到的映射。由测试结果可见,这两幅过曝光和曝光不足的图像,经过均衡化 之后的效果图差别不大,对比度都非常高,设计代码达到了预期的均 衡目的。累加和的计算情况如图6-28所示。

qq_43416206的博客 1127

Java中的简单工厂模式

Java中的简单工厂模式 http://www.blogjava.net/jzgl-ever/archive/2008/07/26/217704.html <!--<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"xmlns:dc="http://purl.org/dc/elements/1.

1841

C++ 小游戏程序 (共七款)

C++编程小游戏_闪耀的天狼星的博客-优快云博客_游戏c++C++跑酷小游戏_闪耀的天狼星的博客-优快云博客。好玩的c++编程小游戏,共六款。代码】C++跑酷小游戏。

小天狼星_布莱克 的博客 3万+

简单工厂模式以及三大工厂模式之间的区别

简单工厂模式 简单工厂模式是比工厂模式还简单的一种模式,简洁到了极致 Factory下不再设具体生产工厂,全部在Factory中用case语句按String生成对应产品实例 大致结构 简单工厂 括号用\ \代替interface_Mouseclass_DellMouseclass_HpMouseMouseFactorystatic_createMouse\int_i\createMouse...

weixin_41474319的博客 511

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

C++设计模式:简单工厂模式与工厂模式

**简单工厂模式**:适合产品种类较少的情况,但不符合开闭原则,扩展性较差。- **工厂模式**:符合开闭原则和依赖倒置原则,更适合需要扩展产品类型的场景。通过对比两种工厂模式,我们可以看到,**工厂模式**是一个更加灵活和可扩展的设计,符合设计模式的基本原则。

该博主有点懒,什么也没写 583

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

设计模式之简单工厂模式

简单工厂模式UML核心思想1.业务和界面分离2.面向对象的三大法则:封装,继承和多态具体实现1.继承2.多态虚方法重写简单工厂工厂的作用实验测试 UML 运算加法减法工厂运算加法减法工厂 核心思想 1.业务和界面分离 如何分清业务逻辑和界面: 一般显示在界面上的,我们肉眼可见的属于界面,而我们看不见的,内部运算属于业务逻辑 对于一个加减运算来说: 运算过程和法则---->业务逻辑 界面---->我们的输入 2.面向对象的三大法则:封装,继承和多态 我们主要使用继承和多态来实现简单的加减运算,至于

xiongwen_li的博客 335

蓝牙模块HM-10手册

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

Java设计模式(二)之工厂模式(1)

** 一、引言 ** 1)没有工厂:以运算符号为例,加入我们需要用到加减法,每次都要去创建一个加法类,减法类 2)简单工厂模式:客户不用直接去创建类,直接调用运算工厂,然后客户要什么符号直接找到这个工厂就可以了。 二、简单工厂特点 1)一个抽象产品类,可以派生出多个具体产品类。 2)一个抽象工厂类,可以派生出多个具体工厂类。 3)每个具体工厂类只能创建一个具体产品类的实例。 三、代码实现 没有工厂的时候:客户需要直接去new对象。 public class Plus { public Plus(){

逆风xmt的博客 195

简单工厂模式

在介绍简单工厂模式之间,我们首先得清楚面向对象的三大特性:封装、继承、多态。 封装: 每个对象都包括自己进行操作所需要的所有信息,而不依赖于其他对象来完成自己的操作。这样的方法和属性通过类的实例来实现。 通过良好的封装可以降低耦合度;类的内部可以自由修改;类具有对外的清晰接口。 继承:通过对对象进行抽象父类,子类实现父类功能并可扩展。 1.子类拥有父类非private的属性和功能(父...

weixin_30500289的博客 64

【Java设计模式】之简单工厂模式

【Java设计模式】之简单工厂模式

北风 625

java架构师 设计模式之3种工厂模式

1、工厂模式 含义及分类:实现了创建者和调用者分离,工厂模式分为简单工厂、工厂方法、抽象工厂模式。 优势: (1)工厂模式是一种较为常用的实例化对象模式了,是用工厂方法代替new操作的一种模式。 (2)利用工厂模式可以降低程序的耦合性,为后期的维护修改提供了很大的便利。 (3)将选择实现类、创建对象统一管理和控制。从而将调用者跟我们的实现类解耦。 2、简单工厂模式 简...

夏沐的博客 228

工厂模式

JavaSE阶段的三大设计模式:工厂、代理、单例 OCP原则:一个软件设计如类,应该对修改关闭,对扩展开放 工厂设计模式可以分为三类:简单工厂模式、工厂方法模式以及抽象工厂模式。 今天主要来说说简单工厂模式和工厂方法模式: 1.简单工厂模式: 专门定义一个类用来创建其他类的实例,被创建的实例通常拥有共同的父类 (1)组成: 一个抽象的产品接口(类) 多个具体产品类 一个具体工厂(生产所有商品) ...

林林酱 134

使用静态工厂方法代替构造器

1、静态工厂方法不是工厂模式: 虽然他们类似,但是工厂模式需要创建一个工厂对象,然后调用方法来创建实例,而静态工厂方法可以写在类中直接替代构造器,并可以通过类名直接调用,无需重新创建对象。(构造器需要创建对象) 2、静态工厂方法的优点: ①静态工厂方法有名字: 对于构造器来说,根据入参的不同可以有多个构造器,但是这些构造器的名称都是一样的,使用者在调用时就会一头雾水。而使用了静态工厂方法之后,你可...

weixin_41052608的博客 167

设计模式第一章 简单工厂模式

最近打算学习一下设计模式,但看完总是记不住,也不能好好坚持看,所以打算写一片帖子,每天记录一下学到的知识。         简单工厂模式用到了面向对象的三大特征:封装、继承、多态,实现了程序的可扩展,可复用,可维护,使程序的灵活性更高。         下面是demo,实现了加法和减法。有一个基类Operation,加法AddOperation和减法SubOperation继承自基类,Oper

lixiaojiao1992的专栏 443

php 设计模式之简单工厂模式

摘要:学习PHP,不知道工厂模式,怎么去看框架源码,怎么能够透彻理解PHP这门语言呢?

mika85489的专栏 543

大话设计模式:第1章 简单工厂模式

第1章:简单工厂模式 面向对象 面向对象(object oriented)三大特性:封装、继承、多态 复制 v.s. 复用,紧耦合 v.s. 松耦合 尽可能避免重复代码,将业务逻辑与界面逻辑拆分 简单工厂模式:工厂负责实例化对象的类 from abc import ABC, abstractmethod from typing import Text # 计算器业务逻辑 # 运算类定义为抽象类...

Always On The Way 350

详解工厂设计模式

设计模式分类 先来说说设计模式的分类,主要分为以下大类: 创建型模式:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。 并发型模式和线程池模式。 1.普通工厂模式 建立一个工厂类,对实现了同一接口的一些类进行实例的创建。 举例如下:(我们举一个发送

shkstart的博客 243
上一篇: Feign【远程调用服务】和zuul【网关】的设计
下一篇: Docker环境的搭建和RabbitMQ的安装
不平衡的叉叉树
博客等级 码龄7年 5833粉丝 181原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值