Java中的工厂设计模式

article/2025/8/24 23:47:01

引出工厂模式

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{@Overridepublic void printComputer() {System.out.println("This is a Surfacebook");}
}
public class Test{//客户端public static void main(String[] args) {Computer computer = new MacbookPro();//子类为接口进行实例化处理computer.printComputer();}
}

如果我想买另外一款电脑,我就需要改变客户端的代码了,这就很麻烦了,所以我们就要想办法将实例化具体类的代码从客户端抽离(解耦到第三方),这时就需要用到工厂模式了。

简单工厂模式:用于没有产品族并且产品数量较少
专门定义一个类(第三方)用来创建其他类实例(解耦,将客户端创建对象的操作解耦到外部第三方类),被创建的实例通常都具有共同的父类。

package www.java.test;import java.util.Scanner;interface Computer{void printComputer();
}
class MacbookPro implements Computer{@Overridepublic void printComputer() {System.out.println("This is a MacbookPro");}
}
class SurfaceBook implements Computer{@Overridepublic void printComputer() {System.out.println("This is a Surfacebook");}
}
//第三方工厂类
class ComputerFactory{public static Computer getInstance(String type){if(type.equals("mac")){return new MacbookPro();}else if(type.equals("surface")){return new SurfaceBook();}return null;}
}
public class Test{//客户端public static void main(String[] args) {Scanner scanner = new Scanner(System.in);System.out.println("请输入你想要的电脑型号:");String type = scanner.nextLine();Computer computer = ComputerFactory.getInstance(type);computer.printComputer();}
}

在这里插入图片描述
假如现在我需要一个新型号的电脑,用了工厂设计模式之后,主方法是不需要改变的,只需要在工厂类中加一条分支就行(对应于我们现实生活中的工厂,也就是加一条生产线)。

package www.java.test;import java.util.Scanner;interface Computer{void printComputer();
}
class MacbookPro implements Computer{@Overridepublic void printComputer() {System.out.println("This is a MacbookPro");}
}
class SurfaceBook implements Computer{@Overridepublic void printComputer() {System.out.println("This is a Surfacebook");}
}
class AlienWare implements Computer{@Overridepublic void printComputer() {System.out.println("This is a AlienWare");}
}
//第三方工厂类
class ComputerFactory{public static Computer getInstance(String type){if(type.equals("mac")){return new MacbookPro();}else if(type.equals("surface")){return new SurfaceBook();}else if(type.equals("alienware")){return new AlienWare();}return null;}
}
public class Test{//客户端public static void main(String[] args) {Scanner scanner = new Scanner(System.in);System.out.println("请输入你想要的电脑型号:");String type = scanner.nextLine();Computer computer = ComputerFactory.getInstance(type);computer.printComputer();}
}

在这里插入图片描述
工厂方法模式----对应的是产品族
定义一个用来创建对象的接口,让子类决定实例化哪一个工厂。
我们需要加一个工厂接口,让不同的工厂类来实现这个接口。

package www.java.test;import java.util.Scanner;interface Computer{void printComputer();
}
class MacbookPro implements Computer{@Overridepublic void printComputer() {System.out.println("This is a MacbookPro");}
}
class SurfaceBook implements Computer{@Overridepublic void printComputer() {System.out.println("This is a Surfacebook");}
}
class AlienWare implements Computer{@Overridepublic void printComputer() {System.out.println("This is a AlienWare");}
}
interface ComputerFactory{Computer createCoputer();
}
class SurfaceFactory implements ComputerFactory{@Overridepublic Computer createCoputer() {return new SurfaceBook();}
}
class AppleFactory implements ComputerFactory{@Overridepublic Computer createCoputer() {return new MacbookPro();}
}
public class Test{//客户端public static void main(String[] args) {//假如我们现在需要苹果的产品//先拿到苹果的工厂ComputerFactory computerFactory = new AppleFactory();Computer computer = computerFactory.createCoputer();computer.printComputer();}
}

它与简单工厂的区别就在于多了一个抽象的工厂,多了很多具体工厂,以前是所有产品都在一个工厂中生产,而现在是不同产品在不同的工厂中生产。

还有一个升级的工厂模式:
抽象工厂—多个产品线混合
特点:提供一个创建一系列相关或相互依赖对象的接口(抽象工厂,多条产品线),而无需指定它们具体的类。


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

相关文章

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)设置一个集合表示已经标记过的节…

最短路径算法——dijkstra

dijkstra 前提:在一张图里,不能有权值为负数的边。 给你一个出发点,求出发点到所有结点的最短距离是多少?如果无法到达某个点,则到这个点的距离是正无穷(一般出现在有向图里面)。 举个&#…

最短路径算法详解

前言: 最短路径算法:用于计算一个节点到其他所有节点的最短路径。主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。 例子: 暑期,你想要出门去旅游,但是在你出发之前,你想知道任意…

基于java最短路径算法的简单实现

一、我们先画一个可达路径图表: -1表示不可直达,0表示自己,其他整数表示长度或者权重 ABCDA012-1B-1015C-1-101D-1-1-10 用图形可表示为: 二、算法思路 1、先列出所有保存所有节点到可达节点的路径二维表 2、逐步寻找从起始节点到…

最短路径算法及应用

乘汽车旅行的人总希望找出到目的地的尽可能的短的行程。如果有一张地图并在图上标出每对十字路口之间的距离,如何找出这一最短行程?  一种可能的方法就是枚举出所有路径,并计算出每条路径的长度,然后选择最短的一条。那么我们很…

关于最短路径算法的理解

“最短路径算法:Dijkstra算法,Bellman-Ford算法,Floyd算法和SPFA算法等。​从某顶点出发,沿图的边到达另一顶点所经过的路径中,各边上权值之和最小的一条路径叫做最短路径。” 我们解决最短路径问题,常用的是Dijkstra…