创建设计模式 - 抽象工厂设计模式
创建设计模式 - 抽象工厂设计模式
欢迎来到java示例中的Abstract Factory Design Pattern。摘要工厂设计模式是创造模式之一。抽象工厂模式几乎类似于工厂模式,除了它更像工厂的工厂。
目录[ 隐藏 ]
- 1抽象工厂
- 1.1抽象工厂设计模式超类和子类
- 1.2每个子类的工厂类
- 1.3抽象工厂设计模式的好处
- 1.4 JDK中的抽象工厂设计模式示例
- 1.5抽象工厂设计模式视频教程
抽象工厂
如果您熟悉java中的工厂设计模式,您会注意到我们有一个Factory类。此工厂类根据提供的输入返回不同的子类,工厂类使用if-else或switch语句来实现此目的。
在抽象工厂模式中,我们摆脱if-else块并为每个子类设置工厂类。然后是一个Abstract Factory类,它将根据输入工厂类返回子类。起初,它似乎令人困惑但是一旦你看到实现,就很容易理解和理解Factory和Abstract Factory模式之间的细微差别。
就像我们的工厂模式帖子一样,我们将使用相同的超类和子类。
抽象工厂设计模式超类和子类
Computer.java
package com.journaldev.design.model;public abstract class Computer {public abstract String getRAM();public abstract String getHDD();public abstract String getCPU();@Overridepublic String toString(){return "RAM= "+this.getRAM()+", HDD="+this.getHDD()+", CPU="+this.getCPU();}
}
PC.java
package com.journaldev.design.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;}@Overridepublic String getRAM() {return this.ram;}@Overridepublic String getHDD() {return this.hdd;}@Overridepublic String getCPU() {return this.cpu;}
}
Server.java
package com.journaldev.design.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;}@Overridepublic String getRAM() {return this.ram;}@Overridepublic String getHDD() {return this.hdd;}@Overridepublic String getCPU() {return this.cpu;}
}
每个子类的工厂类
首先,我们需要创建一个Abstract Factory接口或抽象类。
ComputerAbstractFactory.java
package com.journaldev.design.abstractfactory;
import com.journaldev.design.model.Computer;
public interface ComputerAbstractFactory {public Computer createComputer();
}
请注意,该createComputer()
方法正在返回超类的实例Computer
。现在我们的工厂类将实现此接口并返回其各自的子类。
PCFactory.java
package com.journaldev.design.abstractfactory;
import com.journaldev.design.model.Computer;
import com.journaldev.design.model.PC;
public class PCFactory implements ComputerAbstractFactory {private String ram;private String hdd;private String cpu;public PCFactory(String ram, String hdd, String cpu){this.ram=ram;this.hdd=hdd;this.cpu=cpu;}@Overridepublic Computer createComputer() {return new PC(ram,hdd,cpu);}
}
同样,我们将有一个Server
子类的工厂类。
ServerFactory.java
package com.journaldev.design.abstractfactory;
import com.journaldev.design.model.Computer;
import com.journaldev.design.model.Server;public class ServerFactory implements ComputerAbstractFactory {private String ram;private String hdd;private String cpu;public ServerFactory(String ram, String hdd, String cpu){this.ram=ram;this.hdd=hdd;this.cpu=cpu;}@Overridepublic Computer createComputer() {return new Server(ram,hdd,cpu);}
}
现在我们将创建一个消费者类,它将为客户端类提供创建子类的入口点。
ComputerFactory.java
package com.journaldev.design.abstractfactory;
import com.journaldev.design.model.Computer;
public class ComputerFactory {public static Computer getComputer(ComputerAbstractFactory factory){return factory.createComputer();}
}
请注意,它的一个简单的类和getComputer
方法是接受ComputerAbstractFactory
参数和返回Computer
对象。此时,实施必须变得清晰。
让我们编写一个简单的测试方法,看看如何使用抽象工厂来获取子类的实例。
TestDesignPatterns.java
package com.journaldev.design.test;
import com.journaldev.design.abstractfactory.PCFactory;
import com.journaldev.design.abstractfactory.ServerFactory;
import com.journaldev.design.factory.ComputerFactory;
import com.journaldev.design.model.Computer;
public class TestDesignPatterns {public static void main(String[] args) {testAbstractFactory();}private static void testAbstractFactory() {Computer pc = com.journaldev.design.abstractfactory.ComputerFactory.getComputer(new PCFactory("2 GB","500 GB","2.4 GHz"));Computer server = com.journaldev.design.abstractfactory.ComputerFactory.getComputer(new ServerFactory("16 GB","1 TB","2.9 GHz"));System.out.println("AbstractFactory PC Config::"+pc);System.out.println("AbstractFactory Server Config::"+server);}
}
上述计划的输出将是:
AbstractFactory PC Config::RAM= 2 GB, HDD=500 GB, CPU=2.4 GHz
AbstractFactory Server Config::RAM= 16 GB, HDD=1 TB, CPU=2.9 GHz
这是抽象工厂设计模式实现的类图。
抽象工厂设计模式的好处
- 抽象工厂设计模式提供了接口而不是实现的代码方法。
- 抽象工厂模式是“工厂工厂”,可以轻松扩展以容纳更多产品,例如我们可以添加另一个子类笔记本电脑和工厂LaptopFactory。
- 抽象工厂模式是健壮的,并避免工厂模式的条件逻辑。
JDK中的抽象工厂设计模式示例
- javax.xml.parsers.DocumentBuilderFactory中的newInstance#()
- javax.xml.transform.TransformerFactory中的newInstance#()
- javax.xml.xpath.XPathFactory#的newInstance()
抽象工厂设计模式视频教程
我最近在YouTube上上传了一个视频,用于抽象工厂设计模式。在视频中,我将讨论何时以及如何实现抽象工厂模式。我还讨论了工厂模式和抽象工厂设计模式之间的区别。
创建设计模式 - 抽象工厂设计模式相关推荐
- 抽象工厂模式设计模式_抽象工厂设计模式解释
抽象工厂模式设计模式 抽象工厂设计模式是工厂设计模式的另一种形式. 这种模式可以被视为"超级工厂"或"工厂工厂". 抽象工厂设计模式(属于"四人帮&q ...
- 设计模式(20):创建型-抽象工厂模式(Abstract Factory)
设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 毫无疑问,设计模式于 ...
- 用C# (.NET Core) 实现抽象工厂设计模式
本文的概念性内容来自深入浅出设计模式一书.上一篇文章讲了简单工厂和工厂方法设计模式 使用的是披萨店的例子. 文将继续使用这个例子, 这里要用到抽象工厂. 披萨店的需求变更 现在披萨店在各地授权了很多连 ...
- 抽象工厂和工厂方法示例_抽象工厂设计模式示例
抽象工厂和工厂方法示例 本文是我们名为" Java设计模式 "的学院课程的一部分. 在本课程中,您将深入研究大量的设计模式,并了解如何在Java中实现和利用它们. 您将了解模式如此 ...
- 抽象工厂设计模式示例
本文是我们名为" Java设计模式 "的学院课程的一部分. 在本课程中,您将深入研究大量的设计模式,并了解如何在Java中实现和利用它们. 您将了解模式如此重要的原因,并了解何时以 ...
- 抽象工厂设计模式解释
抽象工厂设计模式是工厂设计模式的另一种形式. 这种模式可以被视为"超级工厂"或"工厂工厂". 抽象工厂设计模式(属于"四人帮"的一部分)属于 ...
- 设计模式之二抽象工厂设计模式
继上篇简单工厂设计模式之后,今天继续讲解抽象工厂设计模式.在简单工厂中,我们的工厂类一次只可以处理一类产品.那么如果我们想处理多类产品,简单工厂是满足不了的.必须要用抽象工厂设计模式. 我们先从概念上 ...
- 系统架构技能之设计模式-抽象工厂模式
一.上篇回顾 上篇我们主要讲述了简单工厂模式和工厂模式.并且分析了每种模式的应用场景和一些优缺点,我们现在来回顾一下: 简单工厂模式:一个工厂负责所有类型对象的创建,不支持无缝的新增新的类型对象的创建 ...
- java工厂模式和抽象工厂_Java中的抽象工厂设计模式
java工厂模式和抽象工厂 Welcome to Abstract Factory Design Pattern in java example. Abstract Factory design pa ...
最新文章
- 如何在用户登录时SAP时自动执行Tcode或者其他一些东西
- 杂项题的基本解题思路——2、图片隐写术
- ajax返回数据类型为JSON数据的处理
- dbcc_name 空的_DBCC INPUTBUFFER和sys.dm_exec_input_buffer DMF概述
- MySQL(三) —— 约束以及修改数据表
- 《数据结构与算法 C语言版》—— 2.2线性表的顺序表示与实现
- 基于SPSS的聚类分析原理概述
- 404丨戳心!等我写完这行代码就和你“吃鸡”
- Source Insight 4.0安装破解及简单使用
- openwrt使用花生壳域名
- 凸优化第三章凸函数 3.3共轭函数
- Tableau 读书笔记
- 毛玻璃matlab,QA清单(毛玻璃赛题)
- 西涝东雪!数场冬季风暴轮番侵袭美国 多地预警
- numpy之轴向统计API
- 简易公交车查询系统c语言,公交线路免费api接口代码
- 【Java多数据源实现教程】实现动态数据源、多数据源切换方式
- 我是如何从测试转为产品的
- ubuntu期货穿透式监管相关信息查看
- 计算机系统维护岗位,酒店电脑系统维护员的岗位职责
热门文章
- Take a Photo and Upload it on Mobile Phones with HTML5
- spring中需要掌握的25个常用注解
- Ubuntu 14.04 或者16.04开启root账户登录和图形界面登录root时候的报错解决方法
- 自定义播放器 winform
- git-撤销工作与的修改-回退缓存区的修改
- dj鲜生-05-配置-静态目录-模板目录-后台语言时区
- webrtc后续补丁
- 如何在Ubuntu 18.04上安装Django
- react-native 路由 react-native-router-flux
- Python系统性能信息模块