欢迎学习Java中的工厂设计模式教程。工厂模式 是** 创意设计模式** 的一种,它在JDK以及Spring、Struts等框架中得到了广泛的应用。
工厂设计模式
当我们有一个具有多个子类的超类,并且需要根据输入返回其中一个子类时,使用工厂设计模式。此模式将类的实例化责任从客户端程序转移到工厂类。让我们首先学习如何在Java中实现工厂设计模式,然后我们将研究工厂模式的优势。我们将看到一些工厂设计模式在JDK中的使用。请注意,此模式也称为工厂方法设计模式 。
工厂设计模式超类
工厂设计模式中的超类可以是一个接口,Abstract class 或者一个普通的Java类。对于我们的工厂设计模式示例,我们有一个带有overriddentoString()
方法用于测试目的。
1package com.journaldev.design.model;
2
3public abstract class Computer {
4
5 public abstract String getRAM();
6 public abstract String getHDD();
7 public abstract String getCPU();
8
9 @Override
10 public String toString(){
11 return "RAM= "+this.getRAM()+", HDD="+this.getHDD()+", CPU="+this.getCPU();
12 }
13}
工厂设计模式子类
假设我们有两个子类PC和Server,实现如下。
1package com.journaldev.design.model;
2
3public class PC extends Computer {
4
5 private String ram;
6 private String hdd;
7 private String cpu;
8
9 public PC(String ram, String hdd, String cpu){
10 this.ram=ram;
11 this.hdd=hdd;
12 this.cpu=cpu;
13 }
14 @Override
15 public String getRAM() {
16 return this.ram;
17 }
18
19 @Override
20 public String getHDD() {
21 return this.hdd;
22 }
23
24 @Override
25 public String getCPU() {
26 return this.cpu;
27 }
28
29}
请注意,这两个类都扩展了Computer
超类。
1package com.journaldev.design.model;
2
3public class Server extends Computer {
4
5 private String ram;
6 private String hdd;
7 private String cpu;
8
9 public Server(String ram, String hdd, String cpu){
10 this.ram=ram;
11 this.hdd=hdd;
12 this.cpu=cpu;
13 }
14 @Override
15 public String getRAM() {
16 return this.ram;
17 }
18
19 @Override
20 public String getHDD() {
21 return this.hdd;
22 }
23
24 @Override
25 public String getCPU() {
26 return this.cpu;
27 }
28
29}
工厂类
现在我们已经准备好了超类和子类,我们可以编写我们的工厂类了。以下是基本实现。
1package com.journaldev.design.factory;
2
3import com.journaldev.design.model.Computer;
4import com.journaldev.design.model.PC;
5import com.journaldev.design.model.Server;
6
7public class ComputerFactory {
8
9 public static Computer getComputer(String type, String ram, String hdd, String cpu){
10 if("PC".equalsIgnoreCase(type)) return new PC(ram, hdd, cpu);
11 else if("Server".equalsIgnoreCase(type)) return new Server(ram, hdd, cpu);
12
13 return null;
14 }
15}
关于工厂设计模式方法的几个要点是;
1.我们可以保留工厂类Singleton,也可以将返回子类的方法保留为static。
2.请注意,根据输入参数,创建并返回不同的子类。getComputer
为工厂方法。
1package com.journaldev.design.test;
2
3import com.journaldev.design.factory.ComputerFactory;
4import com.journaldev.design.model.Computer;
5
6public class TestFactory {
7
8 public static void main(String[] args) {
9 Computer pc = ComputerFactory.getComputer("pc","2 GB","500 GB","2.4 GHz");
10 Computer server = ComputerFactory.getComputer("server","16 GB","1 TB","2.9 GHz");
11 System.out.println("Factory PC Config::"+pc);
12 System.out.println("Factory Server Config::"+server);
13 }
14
15}
上述程序的输出为:
1Factory PC Config::RAM= 2 GB, HDD=500 GB, CPU=2.4 GHz
2Factory Server Config::RAM= 16 GB, HDD=1 TB, CPU=2.9 GHz
工厂设计模式优势
1.工厂设计模式提供了接口代码而不是实现代码的方法。 2.工厂模式从客户端代码中移除了实际实现类的实例化。工厂模式使我们的代码更健壮、更少耦合和更容易扩展。例如,我们可以很容易地更改PC类实现,因为客户端程序不知道这一点。 3.工厂模式通过继承提供实现和客户端类之间的抽象。
JDK中的工厂设计模式示例
1.java.util.Calendar、ResourceBundle和NumberFormatgetInstance()
方法使用Factory模式。
2.Boolean、Integer等包装类中的valueOf()
方法。
工厂设计模式YouTube视频教程
我最近在YouTube上上传了一段关于工厂设计模式的视频,请查看。请点赞并分享视频,订阅我的YouTube频道。Https://www.youtube.com/watch?v=J1QU_R4MQQc
您可以从我的giHub Project.]下载示例代码