纯手写理解设计模式代码之工厂模式

【设计模式】用Java手写21种常见设计模式 文章目录十二、行为1——模板方法模式十三、行为2——迭代器模式 配套使用效果更佳: 本博客配套开源源码github点击跳转 在《25种常见设计模式思想(上)》中我介绍了4种创建型设计模式和7种结构型设计模式,在此博客中我将继续介绍剩下的x种行为类设计模式。以下是本篇博客的思维导图: 十二、行为1——模板方法模式 模板方法模式非常类似于定制表格,设计者先将所有需要填写的信息头(字段名)抽取出来,再将它们整合在一起成为一种既定格式的表格,最后让填表人按照这个标准化模板去填写自己特有的信息,而不必为书写内容、先 阅读详情

工厂模式属于创建型模式:

抽象工厂模式
package com.demo.abstractFactory;

/**
 * 抽象工厂模式
 * 创建型设计模式
 * 就是将一类相同类型的产品抽象为产品族
 * 例如将苹果、苹果树、苹果汁抽象为苹果工厂
 * 这样生产这一产品系列的对象效率大大提升
 * 抽象工厂和方法工厂的对比:
 * 工厂方法适用产生单一产品
 * 抽象工厂适用生产大量同类产品,例如再抽象一类梨子水果产品,十分方便,但是有一缺点:
 * 例如在AbstractFactoryFruit下需要多加一个类型的工厂如:果干工厂
 * 那么将要修改顶层生产工厂的代码,并影响所有的实现类,不符合开闭原则
 */
interface AbstractFactoryFruit {
}

//水果工厂
interface Fruit extends AbstractFactoryFruit{

}
//水果树工厂
interface FruitTree extends AbstractFactoryFruit{

}
//果汁工厂
interface FruitJuice extends  AbstractFactoryFruit{

}

//顶层生产工厂
interface ProductFactory{
    Fruit getFruit();
    FruitTree getFruitTree();
    FruitJuice getFruitJuice();
}
package com.demo.abstractFactory;

/**
 * 抽象工厂模式
 * 创建型设计模式
 * 就是将一类相同类型的产品抽象为产品族
 * 例如将苹果、苹果树、苹果汁抽象为苹果工厂
 * 这样生产这一产品系列的对象效率大大提升
 * 抽象工厂和方法工厂的对比:
 * 工厂方法适用产生单一产品
 * 抽象工厂适用生产大量同类产品,例如再抽象一类梨子水果产品,十分方便,但是有一缺点:
 * 例如在AbstractFactoryFruit下需要多加一个类型的工厂如:果干工厂
 * 那么将要修改顶层生产工厂的代码,并影响所有的实现类,不符合开闭原则
 */
interface AbstractFactoryFruit {
}

//水果工厂
interface Fruit extends AbstractFactoryFruit{

}
//水果树工厂
interface FruitTree extends AbstractFactoryFruit{

}
//果汁工厂
interface FruitJuice extends  AbstractFactoryFruit{

}

//顶层生产工厂
interface ProductFactory{
    Fruit getFruit();
    FruitTree getFruitTree();
    FruitJuice getFruitJuice();
}
package com.demo.abstractFactory;

/**
 * 抽象工厂模式
 * 创建型设计模式
 * 就是将一类相同类型的产品抽象为产品族
 * 例如将苹果、苹果树、苹果汁抽象为苹果工厂
 * 这样生产这一产品系列的对象效率大大提升
 * 抽象工厂和方法工厂的对比:
 * 工厂方法适用产生单一产品
 * 抽象工厂适用生产大量同类产品,例如再抽象一类梨子水果产品,十分方便,但是有一缺点:
 * 例如在AbstractFactoryFruit下需要多加一个类型的工厂如:果干工厂
 * 那么将要修改顶层生产工厂的代码,并影响所有的实现类,不符合开闭原则
 */
interface AbstractFactoryFruit {
}

//水果工厂
interface Fruit extends AbstractFactoryFruit{

}
//水果树工厂
interface FruitTree extends AbstractFactoryFruit{

}
//果汁工厂
interface FruitJuice extends  AbstractFactoryFruit{

}

//顶层生产工厂
interface ProductFactory{
    Fruit getFruit();
    FruitTree getFruitTree();
    FruitJuice getFruitJuice();
}

package com.demo.abstractFactory;

/**
 * 抽象工厂模式
 * 创建型设计模式
 * 就是将一类相同类型的产品抽象为产品族
 * 例如将苹果、苹果树、苹果汁抽象为苹果工厂
 * 这样生产这一产品系列的对象效率大大提升
 * 抽象工厂和方法工厂的对比:
 * 工厂方法适用产生单一产品
 * 抽象工厂适用生产大量同类产品,例如再抽象一类梨子水果产品,十分方便,但是有一缺点:
 * 例如在AbstractFactoryFruit下需要多加一个类型的工厂如:果干工厂
 * 那么将要修改顶层生产工厂的代码,并影响所有的实现类,不符合开闭原则
 */
interface AbstractFactoryFruit {
}

//水果工厂
interface Fruit extends AbstractFactoryFruit{

}
//水果树工厂
interface FruitTree extends AbstractFactoryFruit{

}
//果汁工厂
interface FruitJuice extends  AbstractFactoryFruit{

}

//顶层生产工厂
interface ProductFactory{
    Fruit getFruit();
    FruitTree getFruitTree();
    FruitJuice getFruitJuice();
}
package com.demo.abstractFactory;

/**
 * 抽象工厂模式
 * 创建型设计模式
 * 就是将一类相同类型的产品抽象为产品族
 * 例如将苹果、苹果树、苹果汁抽象为苹果工厂
 * 这样生产这一产品系列的对象效率大大提升
 * 抽象工厂和方法工厂的对比:
 * 工厂方法适用产生单一产品
 * 抽象工厂适用生产大量同类产品,例如再抽象一类梨子水果产品,十分方便,但是有一缺点:
 * 例如在AbstractFactoryFruit下需要多加一个类型的工厂如:果干工厂
 * 那么将要修改顶层生产工厂的代码,并影响所有的实现类,不符合开闭原则
 */
interface AbstractFactoryFruit {
}

//水果工厂
interface Fruit extends AbstractFactoryFruit{

}
//水果树工厂
interface FruitTree extends AbstractFactoryFruit{

}
//果汁工厂
interface FruitJuice extends  AbstractFactoryFruit{

}

//顶层生产工厂
interface ProductFactory{
    Fruit getFruit();
    FruitTree getFruitTree();
    FruitJuice getFruitJuice();
}
工厂方法模式
package com.demo.factory;

import com.demo.singleton.SingletonTest;
import com.demo.test.A;
import com.demo.test.B;
import com.demo.test.Father;

/**
 * 工厂方法模式
 * 创建型设计模式
 * 根据依赖倒置原则的面向接口编程思想,将工厂类抽象成接口
 * 实现更灵活
 * 但是若需要创建的对象很多,则会造成实现类急剧增加,因为必须为每一种新对象创建一个实现类
 */
interface FactoryMethod {
   Father getFather();
}

class AFactory implements FactoryMethod{

    public Father getFather() {
        return new A();
    }
}

class BFactory implements FactoryMethod{

    public Father getFather() {
        return new B();
    }
}
实例工厂模式
package com.demo.factory;

/**
 * 实例工厂
 * 创建对象必须先创建工厂实例
 * 但是可以继承重写,灵活性更高
 */
public class InstanceFactory {
    public <A,B> A getInstance(B type){
        //通过判断传入的字段返回不同的对象
        if(type instanceof StaticFactory){
            //...
        }else{
            //...
        }
        return null;
    }
}
静态工厂模式
package com.demo.factory;

/**
 * 静态工厂--使用静态方法
 * 无需创建工厂实例,直接用类名点出来
 * 缺点是无法被重写,不能更好的实现多态
 */
public class StaticFactory {
    public static <A,B> A getInstance(B type){
        //通过判断传入的字段返回不同的对象
        if(type instanceof StaticFactory){
            //...
        }else{
            //...
        }
        return null;
    }

}

(三)简单工厂模式详解 作者:zuoxiaolong8810(左潇龙),转载请注明出处。             上一章我们着重讨论了代理模式,以及其实现原理,相信如果你看完了整篇博文,应该就对代理模式很熟悉了。             本章我们讨论简单工厂模式,LZ当初不小心夸下海口说不和网络上传播的教学式模式讲解雷同,所以现在感觉写一篇博文压力颇大。             如何来介绍简单工厂呢,LZ着实费了不 阅读详情

相关推荐

【Java面试题汇总】设计模式篇(2026版)

谈谈你对设计模式的理解、七大原则、单例模式、工厂模式、代理模式、模板模式、观察者模式、JDK中用到的设计模式、Spring中用到的设计模式

种一棵树最好的时间是十年前,其次是现在 8925

23种设计模式_MODE02工厂方法模式_手写代码实现

23种设计模式_MODE02工厂方法模式_手写代码实现

zhaoshuangjian 179

工厂模式的三种写法

工厂模式在开发中用处是很多的,这里包含了工厂模式的三种写法,有兴趣可以来看看。

手撸Java工厂模式

Java工厂模式 1、 手写简单工厂(抽象类) 2、 手写工厂模式(接口类) 3、 手写抽象工厂模式 手写简单工厂: 定义抽象类abstract,同时定义抽象方法 /** * 面条的抽象类 * @Description: * @Date: 2021/9/23 0023 下午 14:11 * @Version: 1.0 */ public abstract class INoodler { //该类描述了面条的品类 public abstract String getDes();

joy_tom的博客 1292

深入解析YT8521S千兆以太网PHY芯片的设计与调试要点

本文深入解析了YT8521S千兆以太网PHY芯片的设计与调试要点。重点剖析了硬件设计中的电源方案、RGMII接口电平配置(尤其是1.8V电平方案)以及PCB布局布线等关键细节,并提供了从硬件检查、驱动配置到性能测试的完整调试流程,帮助工程师规避常见陷阱,实现稳定可靠的千兆网络连接。

weixin_29190573的博客 688

FA 新增资产API Demo

DECLARE l_trans_rec fa_api_types.trans_rec_type; l_dist_trans_rec fa_api_types.trans_rec_type; l_asset_hdr_rec fa_api_types.asset_hdr_rec_type; l_asset_desc_rec fa_a

chosen1brain的专栏 2142

JAVA工厂模式(手写Spring IOC案例)

通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。 通过简单模拟spring的IoC容器来尝试工厂模式的使用: 先请出主角ObjectFactory,他只有一个方法getObject(),用来生产对象 @FunctionalInterface public interface ObjectFactory<T> { /** * 返回由该工厂管理的对象的一个实例(可能是共享的或独立的)。 * @return 对象的一个实例 */ T.

qq_36893229的博客 1116

MATLAB编程实战:通过SCPI命令高效读取普源示波器数据

本文详细介绍了如何利用MATLAB通过SCPI命令高效读取普源示波器数据,实现自动化测试与数据分析。文章从硬件连接到软件配置,再到核心代码编写与数据解析,提供了完整的实战指南,帮助工程师和科研人员摆脱手动操作,直接从示波器内存中精准读取数据,并利用MATLAB进行FFT频谱分析,大幅提升工作效率。

weixin_29176179的博客 545

手写工厂模式

手写工厂模式 public class 手写工厂方法模式 { public interface Shape { void draw(); } public interface Factory { Shape getShape(); } public static class Circle implements Shape { public Circle() { System.out.print

dl674756321的博客 1438

1、vectorCast单元测试常用操作

进入软件主页面,点击file,选择set working directory,随便选择一个保存该项目的目录即可。

weixin_59334478的博客 2156

linux系统下XDMA驱动的安装与测试问题总结

先看两个常见的问题。一个是驱动安装问题,一个是驱动测试错误;error 512 能识别PCIE的设备,但是The kernel modle installed correctly, but no devices were recognized.

whm128的博客 3805

秋招java面试题总结2(自用)

秋招java面试题总结2

weixin_45021495的博客 510

基于深度学习的推荐系统设计与实现

基于深度学习的推荐系统设计与实现 作者:禅与计算机程序设计艺术 / Zen and the Art of Computer Programming / TextGenWebUILLM 基于深度学习的推荐系统设计与实现 关键词:深度学习, 推荐系统, 用

AI天才研究院 1079

DesignPattern设计模式

本文主要介绍了设计模式相关内容。包括软件设计的SOLID原则,设计模式的分类,单例模式的思想与实现,工厂模式的思想与实现,建造者模式的思想与实现,代理模式的思想与实现,责任链模式的思想与实现等内容。供个人学习使用。

专注Java和MySQL领域知识分享 1881

恶劣天气下的分割鲁棒性:雨雪雾干扰消除

恶劣天气下的分割鲁棒性:雨雪雾干扰消除​ ,人工智能,计算机视觉,大模型,AI,本文围绕恶劣天气下语义分割鲁棒性及雨雪雾干扰消除展开,分析了雨雪雾对图像和分割任务的影响,介绍了基于图像增强、深度学习等现有解决方法,以及针对不同干扰的具体方案,还探讨了提高分割鲁棒性的策略、实验评估情况,指出当前面临复杂天气、数据缺乏、实时性等挑战,并展望了端到端模型、无监督学习等未来发展趋势,为该领域研究提供了全面参考。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 17万+

SAP ABAP 缓冲同步揭秘——从 DDLOG 表到 RSDBBUF3 的完整实践指南

DDLOG 看似一张不起眼的系统表,却承担着 SAP 多实例环境下的数据一致性重任。通过掌握其字段意义、解析方法及周边监控工具,你可以在性能与一致性之间找到最佳平衡;通过精细化的参数管理与主动刷新策略,更能在关键业务场景中确保“数据永远是最新的”。愿本文能成为你日常排障与架构决策的参考手册。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 312

手写工厂模式:优化对象创建的艺术

摘要: 工厂模式通过封装对象创建过程,降低代码耦合度,提升灵活性。本文解析三种工厂模式: 简单工厂:单一工厂类根据参数创建不同对象,如VehicleFactory生成汽车/飞机; 工厂方法:抽象工厂类定义接口,子类(如PizzaFactory)实现具体对象创建; 抽象工厂:创建对象家族(如DogFactory生成狗和狗粮),适用于关联产品组。 代码示例演示各类模式实现,展现工厂模式在分离创建逻辑、增强扩展性方面的优势。 (字数:149)

你若盛开,清风自来 1195

IDEA的使用指南

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

Spring常用设计模式--工厂方法模式

本专栏内容参考自:咕泡学院Tom老师的《Spring5核心原理与30个类手写实战》,仅作个人学习记录使用,如有侵权,联系速删.   工厂方法模式指定义一个创建对象的接口,但让实现这个接口的类决定实例化哪个类,工厂方法模式让类的实例化推迟到子类中进行。在工厂方法模式中用户只需要关心所需产品对应的工厂,无需关心创建细节,而且加入新产品时符合开闭原则。   工厂方法模式主要解决产品扩展的问题。在上一篇简单工厂模式中,随着产品链的丰富,如果每个课程的创建逻辑都有区别,则工厂的职责会变得越来越多,有点像万能工厂,.

想着百万年薪努力的小赵 3万+

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

STM32F407中文手册

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

Spring常用设计模式--抽象工厂模式

本专栏内容参考自:咕泡学院Tom老师的《Spring5核心原理与30个类手写实战》,仅作个人学习记录使用,如有侵权,联系速删。   抽象工厂模式是指提供一个创建一系列相关或相互依赖对象的接口,无需指定他们的具体类。客户端(应用层)不依赖于产品实体类如何被创建、如何被实现等细节,强调的是一系列相关的产品对象(属于同一产品族)一起使用创建对象需要大量重复的代码。需要提供一个产品类的库,所有的产品以同样的接口出现,从而使客户端不依赖于具体实现。   看抽象工厂模式之前,我们要了解两个概念:产品等级结构和产品族.

想着百万年薪努力的小赵 3万+

Java 设计模式——工厂模式

  前言 一、简介 二、简单工厂模式 三、工厂方法模式 四、抽象工厂模式 五、总结 六、Demo地址 六、参考文档 七、内容推荐   前言 最近在复习java设计模式中的工厂模式。本来有一点小小的理解。不过看了好多篇博客后,感觉都写的不错,就是有点太零散了。最后还是决定自己手写一把,加深印象。顺便做个总结,以后复习起来也方便许多。 一、简介 目前从网上了解工厂...

斌林诚上的博客 1774

通过Demo案例的形式弄懂Java中的设计模式

本文通过Java代码的形式手写设计模式案例,包含多个设计模式,例如常见的责任链模式,单例模式,工厂模式,模板模式,策略模式等,让你能轻松学懂设计模式以及能够手写出来

LUCIAZZZ的博客 1344

java设计模式 工厂,Java 设计模式——工厂模式

image前言最近在复习java设计模式中的工厂模式。本来有一点小小的理解。感觉都写的不错,就是有点太零散了,最后还是决定自己手写一把,加深印象。顺便做个总结,以后复习起来也方便许多。一、简介目前从网上了解工厂模式大体分为简单工厂、工厂方法、抽象工厂等三种模式。工厂方法模式也可称为工厂模式,与抽象模式都是属于GOF23种设计模式中的一员。可以大概理解为:简单工厂进阶变成了工厂方法,然后再进阶成了抽...

weixin_28938701的博客 174

Java设计模式模式 (包括工厂模式xml解析)

设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样。项目中合理的运用设计模式可以完美的解决很多问题,每种模式在现在中都有相应的原理来与之对应,每...

wangdongli_1993的博客 1535

面试官:设计模式之简单工厂模式

面试官:设计模式之简单工厂模式

真正的大师永远怀着一颗学徒的心 1766

纯手写理解设计模式代码之建造者模式

建造者模式同属于创建型模式 package com.demo.build; /** * 建造者模式 * 属于创建型模式 * 建造者模式与工厂模式相似,也是用来创建对象 * 建造者模式关键点在于建造和装配分离, * 建造者最终只会生成一个完整的对象,对象里面会分成好几个模块,建造者模式强调的是这个装配的过程。 * 而工厂模式有可能是会同时创建一个(简单工厂或者工厂方法模式)或者多个对象(抽象工厂模式),强调生产创建。 */ abstract class GunBuilder { //抽

疯人愿 255

秋招八股--设计模式

秋招八股--设计模式

weixin_41171614的博客 1195
上一篇: Redis的一些事
下一篇: 纯手写理解设计模式代码之建造者模式
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值