设计模式: Java中的工厂设计模式
原文链接
前言
工厂设计模式(Factory Design Pattern)属于创建模式之一,工厂设计模式在JDK,Spring,Stuts被广泛使用
当一个类或者接口有多个子类,并且基于输入返回特定的子类,此时会使用工厂设计模式。这种模式负责从客户端到工厂类的实例化。
让我们首先学习如何在java中实现工厂设计模式,然后我们将研究工厂模式的优势,我们将在JDK中看到一些工厂设计模式的使用。请注意,此模式也称为工厂方法设计模式。
工厂设计模式: 超类
工厂设计模式中的超类可以是接口,抽象类或普通的java类。对于我们的工厂设计模式示例,我们使用带有重写的toString()
方法的抽象超类进行测试。
package com.github.shellhub.model; public abstract class Computer { public abstract String getRAM(); public abstract String getHDD(); public abstract String getCPU(); @Override public String toString(){ return "RAM= "+this.getRAM()+", HDD="+this.getHDD()+", CPU="+this.getCPU(); } }
工厂设计模式: 子类
假设我们有两个子类PC
和Server
,具有以下实现。
PC.java
package com.github.shellhub.model; public class PC extends Computer { private String ram; private String hdd; private String cpu; public PC(String ram, String hdd, String cpu){ this.ram=ram; this.hdd=hdd; this.cpu=cpu; } @Override public String getRAM() { return this.ram; } @Override public String getHDD() { return this.hdd; } @Override public String getCPU() { return this.cpu; } }
Server.java
package com.github.shellhub.model; public class Server extends Computer { private String ram; private String hdd; private String cpu; public Server(String ram, String hdd, String cpu){ this.ram=ram; this.hdd=hdd; this.cpu=cpu; } @Override public String getRAM() { return this.ram; } @Override public String getHDD() { return this.hdd; } @Override public String getCPU() { return this.cpu; } }
工厂类
既然现在我们准备好了超类和子类,我们可以编写工厂类。以下是基本的实现。
package com.github.shellhub.factory; import com.github.shellhub.model.Computer; import com.github.shellhub.model.PC; import com.github.shellhub.model.Server; public class ComputerFactory { public static Computer getComputer(String type, String ram, String hdd, String cpu) { if ("PC".equalsIgnoreCase(type)) { return new PC(ram, hdd, cpu); } else if ("Server".equalsIgnoreCase(type)) { return new Server(ram, hdd, cpu); } return null; } }
使用
这是一个简单的测试客户端程序,它使用上面的工厂设计模式实现。
package com.github.shellhub; import com.github.shellhub.factory.ComputerFactory; import com.github.shellhub.model.Computer; public class TestFactory { public static void main(String[] args) { Computer pc = ComputerFactory.getComputer("pc", "2 GB", "500 GB", "2.4 GHz"); Computer server = ComputerFactory.getComputer("server", "16 GB", "1 TB", "2.9 GHz"); System.out.println("Factory PC Config::" + pc); System.out.println("Factory Server Config::" + server); } }
Output:
Factory PC Config::RAM= 2 GB, HDD=500 GB, CPU=2.4 GHz Factory Server Config::RAM= 16 GB, HDD=1 TB, CPU=2.9 GHz
工厂设计模式的优点
- 工厂设计模式提供了接口而不是实现的代码方法。
- 工厂模式从客户端代码中删除实际实现类的实例化。工厂模式使我们的代码更健壮,耦合更少,易于扩展。例如,我们可以轻松更改PC类实现,因为客户端程序不知道这一点。
- 工厂模式通过继承提供实现和客户端类之间的抽象。
工厂设计模式在JDK中的应用
-
java.util.Calendar
,ResourceBundle
和NumberFormat getInstanc()
方法使用Factory模式。 - 包装类中的
valueOf()
方法,如Boolean
,Integer
等。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Yii2语言国际化配置
转载 Yii2语言国际化配置 最近想将博客做成支持多语言的,还好Yii2支持这个功能,于是查看了下官方的文档,哎,看了半天不知道干嘛用的,于是各种百度,Google的搜索,最终才明白原来很简单,只是官方写的太复杂 下面介绍下具体的使用步骤,具体介绍我就不写了,官方写比我清楚,我就写怎么使用 第一步 创建i18n配置文件 ./yii message/config @app/config/i18.php // yii 在项目目录下 Yii2创建的时候自动生成的 执行完命令之后会在项目根目录config下创建一个i18n.php文件 为什么要创建这个文件,因为我们为了多语言处理,需要生成一个对应的映射文件,只要生成就好了,稍后的配置程序会自动调用处理 第二步 修改配置规则 打开config/i18n.php,看下生成的配置文件的代码,如下: return [ 'color' => null, 'interactive' => true, 'help' => null, 'sourcePath' => '@yii', 'messagePath' =...
- 下一篇
笔试题解答
/** * @author shishusheng * @date 2018/8/22 23:35 */ import java.util.ArrayList; public class ReverseList { private class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; } } ArrayList<Integer> arrayList = new ArrayList<>(); public ArrayList<Integer> printListFromTailToHead(ListNode listNode) { if(listNode != null){ this.printListFromTailToHead(listNode.next); arrayList.add(listNode.val); } return arrayList; } } 显然是斐波那契数列 /** * @author shishusheng *...
相关文章
文章评论
共有0条评论来说两句吧...