网站怎么做外联,公司广告设计图片,建筑网2016农村别墅图大全,手机有软件做ppt下载网站有哪些内容吗Java - 工厂设计模式 一. 简介二. 例子2.1 定义抽象类2.2 定义子类2.3 创建工厂2.4 测试 三. JDK中使用工厂模式的案例 前言 这是我在这个网站整理的笔记,有错误的地方请指出#xff0c;关注我#xff0c;接下来还会持续更新。 作者#xff1a;神的孩子都在歌唱 工厂设计模式… Java - 工厂设计模式 一. 简介二. 例子2.1 定义抽象类2.2 定义子类2.3 创建工厂2.4 测试 三. JDK中使用工厂模式的案例 前言 这是我在这个网站整理的笔记,有错误的地方请指出关注我接下来还会持续更新。 作者神的孩子都在歌唱 工厂设计模式广泛应用于 JDK 以及 Spring等框架中。
一. 简介
当我们有一个带有多个子类的超类并且根据输入我们需要返回其中一个子类时就会使用工厂设计模式。该模式将类实例化的步骤从客户端程序转移到工厂类。 简单理解就是一个东西有多种不同的实现方式你选择不同方式最后的结果就会不一样 优点
工厂设计模式提供了接口而不是实现的代码方法。工厂模式从客户端代码中删除了实际实现类的实例化。工厂模式使我们的代码更加健壮耦合性更低并且易于扩展。例如我们可以轻松地更改 PC 类的实现因为客户端程序不知道这一点。工厂模式通过继承提供实现类和客户端类之间的抽象。
二. 例子
假如我们要做一个电脑购买系统里面有台式机PC和笔记本laptop并且在购买的时候可以选择内存memory和磁盘disk两个参数。那么我们就可以使用工厂模式进行设计如下图 接下来会讲解一下代码 是不是感觉很简单其实这种简单的工厂模式反而更像是一种编程习惯我们在开发过程中都有使用到 2.1 定义抽象类
工厂设计模式中的超类可以是接口、抽象类或 普通的java类。这里我定义了一个电脑抽象类重写 toString() 方法方便测试。
/*** author chenyunzhi* date 2023/12/24 20:39* description 电脑抽象类*/
public abstract class Computer {/*** 内存抽象方法* return string*/public abstract String memory();/*** 磁盘抽象方法* return string*/public abstract String disk();Overridepublic String toString() {return 内存: memory() 磁盘: disk();}
}2.2 定义子类
我们有两个子类 PC 和 laptop实现如下注意这两个类都继承了Computer 抽象类。
/*** author chenyunzhi* date 2023/12/24 20:48* description 台式机*/
public class Pc extends Computer{private final String memory;private final String disk;public Pc(String memory, String disk) {this.memory memory;this.disk disk;}Overridepublic String memory() {return this.memory;}Overridepublic String disk() {return this.disk;}
}Laptop类
/*** author chenyunzhi* date 2023/12/24 20:52* description 笔记本电脑*/
public class Laptop extends Computer{private final String memory;private final String disk;public Laptop(String memory, String disk) {this.memory memory;this.disk disk;}Overridepublic String memory() {return this.memory;}Overridepublic String disk() {return this.disk;}
}2.3 创建工厂
现在我们已经准备好了超类和子类就可以可以编写工厂类了。
/*** author chenyunzhi* date 2023/12/24 20:56* description 电脑工厂*/
public class ComputerFactory {/*** 获取电脑* param type 电脑类型* param memory 内存* param disk 磁盘* return*/private static final String PC pc;private static final String LAPTOP laptop;public static Computer getComputer(String type, String memory, String disk) {if (PC.equals(type)) {return new Pc(memory, disk);} else if (LAPTOP.equals(type)) {return new Laptop(memory, disk);} else {return null;}}}注意
我们可以保留 Factory 类 Singleton 也可以将返回子类的方法保留为static。根据输入不同参数类型创建并返回不同的子类。getComputer是工厂方法。
2.4 测试
/*** 测试类** author chenyunzhi* date 2023/12/24 21:02*/
public class Test {public static void main(String[] args) {Computer pc ComputerFactory.getComputer(pc, 16 GB, 1 TB);Computer laptop ComputerFactory.getComputer(laptop, 32 GB, 512 GB);System.out.println(pc电脑 pc);System.out.printf(laptop电脑 laptop);}
}三. JDK中使用工厂模式的案例 这是网上搜到的有空可以去研究一下这些jdk源码方便加深理解 java.util.Calendar、ResourceBundle 和 NumberFormatgetInstance()方法使用工厂模式。valueOf()包装类中的方法如 Boolean、Integer 等。 作者神的孩子都在歌唱 本人博客https://blog.csdn.net/weixin_46654114 转载说明务必注明来源附带本人博客连接。