Java 工厂设计模式

article/2025/8/24 23:13:54

简介

工厂设计模式在java中有大量的应用,如spring框架,这种类型的设计模式属于创建型模式。在工厂设计模式中,创建逻辑不会对客户端暴露,可以通过一个对外接口创建所需对象。

工厂模式使用场景

需要频繁创建对象且这些对象多处使用,业务发生改变需要修改多处代码,使用工厂模式即可进行代码解耦,业务改变修改时只需修改工厂部分代码

简单工厂模式

1.抽象一个对象,定义共性内容 

/*** 将购商场象为一个接口*/
public interface IMarket {/*** 商品的接口*/void goods();/***** 商场京东、淘宝、拼多多,各个商场有各自的商品*/
}

2.创建具体实现类,实现自己特有内容

/*** 京东商场*/
public class JdMarket implements IMarket {/*** 具体实现京东的商品*/@Overridepublic void goods() {System.out.println("这是京东的商品");}
}/*** 拼多多商场*/
public class PddMarket implements IMarket {/*** 具体实现PDD的商品*/@Overridepublic void goods() {System.out.println("这是拼多多的商品");}
}/*** 淘宝商场*/
public class TbMarket implements IMarket {/*** 具体实现TB的商品*/@Overridepublic void goods() {System.out.println("这是淘宝的商品");}
}

3.创建工厂,定义通过类型获取对应产品对象的方法

/*** 获取商场的工厂类*/
public class SimpleFactory {/*** 根据Type获取相应的商场* @param type 商场类型* @return 对应商场*/public static IMarket getMarket(String type) {switch (type) {case "JD":return new JdMarket();case "TB":return new TbMarket();case "PDD":return new PddMarket();default:return null;}}
}

测试结果 

public class SimpleFactoryTestMain {public static void main(String[] args) {// 此处传入京东,获取京东商场IMarket market = SimpleFactory.getMarket("JD");market.goods();}
}

 总结

简单工厂就是将对象抽象,定义共性内容,创建具体实现类。然后创建一个工厂,通过传入不同类型,创建对应对象。在一定程度上解耦代码。未来产品发生变化时,一定程度上减少修改工作量。但是在新增对象时需要修改工厂内部逻辑,对象过多时增加了系统逻辑复杂度,不利于未来的扩展和维护。

工厂方法模式

对简单工厂模式进一步抽象定义,使得可以在不修改工厂逻辑的情况下,可以拓展添加新的对象。

抽象工厂类,创建工厂接口,抽象定义获取对象的接口。

/*** 抽象定义工厂*/
public interface IMarketFactory {/*** 定义获取商场的接口* @return 具体商场对象*/IMarket getMarket();
}

定义具体工厂类,实现抽象工厂接口,实现获取对象的方法,由具体的工厂创建对应的对象 

/*** 具体实现京东商场工厂*/
public class JdMarketFactory implements IMarketFactory {/*** 实现获取商场对象的方法* @return 京东商场*/@Overridepublic IMarket getMarket() {return new JdMarket();}
}/*** 拼多多商场工厂具体实现*/
public class PddMarketFactory implements IMarketFactory {/*** 实现获取商场对象的方法* @return 拼多多对象*/@Overridepublic IMarket getMarket() {return new PddMarket();}
}/*** 实现淘宝商场工厂*/
public class TbMarketFactory implements IMarketFactory {/*** 实现获取商场对象的方法* @return 淘宝商场对象*/@Overridepublic IMarket getMarket() {return new TbMarket();}
}

测试结果

public class FactoryMethodTestMain {public static void main(String[] args) {// 获取京东商场对象JdMarketFactory jdMarketFactory = new JdMarketFactory();IMarket market = jdMarketFactory.getMarket();market.goods();// 获取淘宝商场对象TbMarketFactory tbMarketFactory = new TbMarketFactory();IMarket tbMarket = tbMarketFactory.getMarket();tbMarket.goods();}
}

 总结

工厂方法模式的优点是具备更高的复用性和可读性,可以在不需要修改工厂逻辑的情况下可以创建新的对象。缺点是需要创建很多的工厂,当类型很多的时候,需要创建的工厂类就很多。

抽象工厂模式 

在工厂方法模式中,工厂能创建的对象类型太过单一,例如一个商场,有批发类型的商场,也有零售的商场,如果使用工厂方法模式,那么我们就需要创建两个工厂来进行生产对应类型的对象。经过时间发展后,假设又有了新的营销模式,如网销,直播销售的方式等,又得创建更多的工厂来进行生产对应的对象。那么如果将工厂继续抽象,在工厂中定义创建对象的接口,然后由具体的子工厂实现具体创建那种对象。这样,工厂就可以生产多种类型的对象,便于未来的维护与拓展。

1.创建抽象工厂

/*** 定义抽象工厂* 通过抽象工厂定义可以创建的各种类型,比如零售类和批发类*/
public interface IAbstractFactory {/**** 创建零售类的商场* @return 零售类商场*/IRetailMarket makeRetailMarket();/*** 创建批发类的商场* @return 批发类商场*/IWholesalMarket makeWholesalMarket();
}

2.创建具体实现的工厂

/*** 定义京东商场类工厂,京东商场工厂实现抽象工厂,即可创建对应功能的对象*/
public class JdMarketFactory implements IAbstractFactory {/*** 创建京东零售商场对象* @return 京东零售商场对象*/@Overridepublic IRetailMarket makeRetailMarket() {return new JdRetailMarket();}/*** 创建京东批发商场对象* @return 京东批发商场对象*/@Overridepublic IWholesalMarket makeWholesalMarket() {return new JdWholesalMarket();}
}/*** 创建淘宝商场工厂类*/
public class TbMarketFactory implements IAbstractFactory {/*** 创建淘宝零售商场对象* @return 淘宝零售商场对象*/@Overridepublic IRetailMarket makeRetailMarket() {return new TbRetailMarket();}/*** 创建淘宝批发商场对象* @return 淘宝批发商场对象*/@Overridepublic IWholesalMarket makeWholesalMarket() {return new TbWholesalMarket();}
}

测试结果

public class AbsFactoryTestMain {public static void main(String[] args) {// 创建京东商场工厂,IAbstractFactory jdMarketFactory = new JdMarketFactory();// 通过jd工厂创建出京东零售商场与京东批发商场IRetailMarket jdRetailMarket = jdMarketFactory.makeRetailMarket();IWholesalMarket jdWholesalMarket = jdMarketFactory.makeWholesalMarket();jdRetailMarket.retail();jdWholesalMarket.wholesal();System.out.println("----------------------分割线---------------------");// 创建淘宝商场工厂IAbstractFactory tbMarketFactory = new TbMarketFactory();// 通过淘宝商场工厂创建淘宝零售商场与淘宝批发商场IWholesalMarket tbWholesalMarket = tbMarketFactory.makeWholesalMarket();IRetailMarket tbRetailMarket = tbMarketFactory.makeRetailMarket();tbRetailMarket.retail();tbWholesalMarket.wholesal();}
}

 总结

将工厂进一步封装成抽象工厂,定义各类工厂可以创建的对象类型,使工厂可以创建的类型不再单一,在实际应用中可以将相关的功能整合成一个功能线。开发时使得代码可读性与可维护性提高,同时可以快捷的使用各种封装好的功能。


http://chatgpt.dhexx.cn/article/B64e0wAl.shtml

相关文章

简单工厂设计模式

简单工厂设计模式 刚开始学设计模式,犹如刚睁开眼看世界的孩子,满眼都是惊奇,原来代码的世界可以如此的精彩纷呈.当然这些都是前辈智慧的结晶.简单工厂设计模式是接触的第一个设计模式,看完后更多的是不懂和迷糊.不过相信慢慢会懂得其精髓的. 简单工厂设计模式是创建型(就是把对…

Java工厂设计模式详解

前言 工厂设计模式在开发过程中有大量的运用,不管是spring框架,还是诸多的中间件,都有着工厂设计模式的体现 比如,手机生产工厂,当提供了相关生产手机的原材料,工厂就可以按要求生产出手机 工厂模式介绍 …

Android工厂设计模式(简单工厂,工厂方法,抽象工厂,BitmapFactory简单工厂分析,Retrofit抽象工厂分析)

文章目录 创建型设计模式(简单工厂,工厂方法,抽象工厂)一.简单工厂模式引出简单工厂模式 二.工厂方法模式三.抽象工厂模式 Android源码中用到的工厂模式举例一.BitmapFactory 源码工厂模式详解(简单工厂)二.Retrofit的工厂模式(抽象工厂) 创建型设计模式…

工厂设计模式有什么用?

工厂方法是非常古老且常用的设计模式。原因主要是一个系统要运转起来一定会涉及到对象的实例化过程,如果对象的实例化分散在各种逻辑代码之间,那么就会非常零乱、难以维护,bug自然也多。 工厂方法的出现解决的就是对象创建的问题&#xff0c…

Java中的工厂设计模式

引出工厂模式 package www.java.test;interface Computer{void printComputer(); } class MacbookPro implements Computer{Overridepublic void printComputer() {System.out.println("This is a MacbookPro");} } class SurfaceBook implements Computer{Override…

Java工厂设计模式

工厂设计模式 一、面向对象的设计原则1.1 OCP(开闭原则,Open-Closed Principle)1.2 DIP(依赖倒转原则,Dependence Inversion Principle)1.3 LOD(迪米特法则,Law Of Demeter&#xff…

设计模式—工厂设计模式

工厂设计模式 1.概述2.简单工厂模式2.1 结构2.2 实现2.3 优缺点2.4 扩展 3.工厂方法模式3.1 概述3.2 结构3.3 实现3.4 优缺点 4.抽象工厂模式4.1 概述4.2 结构4.3 实现4.4 优缺点4.5 应用场景 5.扩展模式5.1 第一步:定义配置文件5.2 改写工厂类 6.JDK源码解析—Coll…

工厂设计模式 - 详解

介绍 工厂模式是Java中最常用的设计模式之一,这种类型的设计模式数据创建型模式。 主要就是负责创建对象的,当我们使用new创建对象的时候会导致对该对象的耦合性很严重,当我们需要修改的时候需要对所有new的对象进行修改,违反了软…

【iOS】—— 工厂设计模式

工厂设计模式 文章目录 工厂设计模式设计模式概念设计模式七大准则开闭原则单⼀职责原则里氏替换原则依赖倒转原则接口隔离原则迪米特法则合成复用原则 类族模式简单工厂模式优点缺点主要作用示例文件分类实现效果: 工厂方法模式优点缺点主要作用:示例&a…

【设计模式】工厂模式(Factory Pattern)

1. 概述 工厂模式(Factory Pattern)是最常用的设计模式之一,它属于创建类型的设计模式。它提供了一种创建对象的最佳方式,在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过一个共同的接…

设计模式之工厂模式,史上最强,不服来辩!

设计模式是对大家实际工作中写的各种代码进行高层次抽象的总结,如果设计模式没学会,抽象能力肯定就不会太强。常见的设计模式有 23 种,今天我们只聊最简单的工厂模式。 工厂模式是属于创建型模式的,通过工厂获取一个一个的新对象。…

工厂设计模式

1、概念 工厂模式分三种:简单工厂模式、工厂方法模式、抽象工厂模式 简单工厂模式(Simple Factory Pattern):属于类的创新型模式,又叫静态工厂方法模式(Static FactoryMethod Pattern),是通过专门定义一个类来负责创建其他类的实例&#xf…

设计模式之工厂模式(factory pattern)

工厂顾名思义就是创建产品,根据产品是具体产品还是具体工厂可分为简单工厂模式和工厂方法模式,根据工厂的抽象程度可分为工厂方法模式和抽象工厂模式。该模式用于封装和管理对象的创建,是一种创建型模式。本文从一个具体的例子逐步深入分析,来体会三种工厂模式的应用场景和…

sqlserver2008的SSMS连接sqlserver2016的时候提示‘索引超出了数组界限。’

解决:打sp3补丁。 http://www.microsoft.com/en-us/download/details.aspx?id44271

Matlab报错 :“位置 x 处的索引超出数组边界”

经常遇到“位置 x 索引超出数组边界”的报错,今天突然想到一个以前一直没有太留意的奇葩问题:这个报错里“位置x”指的是哪里?为什么一会是“位置3”,一会是“位置1”,有什么神秘的规矩吗? 善用搜索没发现…

.net reflector 反编译失败 索引超出了数组界限问题处理方法

.net reflector 反编译失败 索引超出了数组界限问题处理方法 时间:9个月前 作者:庞顺龙 浏览:177 [站内原创,转载请注明出处] 标签: Reflector .net reflector 反编译失败 索引超出了数组界限问题处理方法 de…

matlab索引超出数组边界且不提示数组边界的一种处理办法

问题如下。 相关代码如下: 问题原因如下: 将excel表另存为txt时选择的保存类型是Unicode文本(*.txt)。 处理办法。 将Unicode文本(*.txt)换成文本文件(制表符分隔)(*.txt)。 问题的表现如下: 利用matlab工作区发现…

最短路径算法详细介绍

据 Drew 所知最短路经算法现在重要的应用有计算机网络路由算法,机器人探路,交通路线导航,人工智能,游戏设计等等。美国火星探测器核心的寻路算法就是采用的D*(D Star)算法。 最短路经计算分静态最短路计算和…

[算法]-最短路径算法总结

Dijkstra最短路径算法 按路径长度的递增次序,逐步产生最短路径的贪心算法 基本思想:首先求出长度最短的一条最短路径,再参照它求出长度次短的一条最短路径,依次类推,直到从顶点v 到其它各顶点的最短路径全部求出为止。 时间复杂…

c++实现最短路径算法(Dijkstra算法)

0简介 Dijkstra算法是一种计算某一顶点到其余顶点最短路径的算法。它采用了贪心的策略,实现时使用了广度优先。这个算法常学常忘,因此写篇博客彻底解决它。 1计算步骤介绍 Dijkstra的计算步骤不难,如下 (1)设置一个集合表示已经标记过的节…