设计模式 工厂方法_工厂方法设计模式

设计模式 工厂方法

工厂方法模式是流行的创作设计模式之一。 它并不特别依赖于工厂对象来创建对象。 而是要在同一类中使用单独的方法来创建对象。

Factory Method模式定义了一个用于创建对象的接口,但是让子类决定如何实例化其对象。 每个子类必须定义其Factory方法。

在本教程中,我们将通过VehicleStore的示例学习如何实现Factory Method设计模式。

定义

让我们从定义一个VehicleStore类开始:

 public abstract class VehicleStore {  public Vehicle orderVehicle(VehicleType type) { Vehicle vehicle = createVehicle(type);  vehicle.getServiced(); vehicle.polish(); vehicle.provideClearance();         return vehicle; }  public abstract Vehicle createVehicle(VehicleType type);   } 

其中VehicleType是定义车辆类型的枚举:

 public enum VehicleType { BIKE, CAR, TRUCK, CRANE }; 

注意,我们已经将createVehicle()方法定义为 abstract 一个负责创建特定类型车辆的人。

定义子类:

现在,我们有两种类型的VehicleStoreLightVehiclesStoreHeavyVehiclesStore

 public class LightVehiclesStore extends VehicleStore { @Override public Vehicle createVehicle(VehicleType type) { switch (type) { case BIKE : return new Bike(); case CAR : return new Car(); } return null ; }  }   public class HeavyVehiclesStore extends VehicleStore { @Override public Vehicle createVehicle(VehicleType type) { switch (type) { case TRUCK : return new Truck(); case CRANE : return new Crane(); } return null ; }  } 

LightVehiclesStore负责销售轻型车辆,例如自行车或汽车。 另一方面, HeavyVehiclesStore出售卡车和起重机。

如我们所见,这两个子类都覆盖了createVehicle()方法。

我们的示例的UML图:

我们可以用类似于以下内容的UML图来表示上述示例:

我们创建的Vehicle的类型在具体的子类中确定。 同样,我们将VehicleStore公开为这些子类的公共接口。

我们可以进一步前进,为VehicleStore定义一个Factory对象 ,以避免将这些子类直接暴露给客户端代码。

结论:

在本教程中,我们探索了一个重要的创建模式-工厂方法模式。 这种模式的中心思想是让子类决定如何实例化对象。

我们的Java API中提供了该模式的一些流行实现。 其中一些包括Calendar.getInstance()java.text.NumberFormat.getInstance()java.util.ResourceBundle.getBundle()方法。

翻译自: https://www.javacodegeeks.com/2019/08/factory-method-design.html

设计模式 工厂方法

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/332005.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

靖江机器人怎么样_铁饭碗不保?靖江可能消失的12大职业!快看有你的工作没?...

原标题:铁饭碗不保?靖江可能消失的12大职业!快看有你的工作没?无人飞机、无人驾驶、智能机器人....你能想象这些充满现代感的高科技正在改变我们的生活吗?在科技高速发展的今天人工智能逐渐能够代替人类的部分工作但&a…

MarkdownPad 汉化破解(含下载地址)

转自 http://jingyan.baidu.com/article/ca41422fe209271eaf99ed7c.html MarkdownPad是一个全功能Markdown编辑器的Windows。 【1】MarkdownPad 汉化破解(含下载地址) 工具/原料 MarkdownPad 2.4 方法/步骤 软件 下载地址(本软件为绿色版…

捡对象引流脚本 内容_对象和索引流

捡对象引流脚本 内容我本来要写一篇关于如何将流与每个元素的索引混合的文章,但是Baeldung上的人们已经很好地涵盖了这个主题 ! 鉴于我是他们编辑团队的一员,我为他们/我们感到自豪。 有趣的是,特别是Streams中的Java函数式编程如…

散列之再散列

【0】README 0.1)本文描述总结于 数据结构与算法分析, 但源代码为原创; 0.2)为什么写这篇博文? 再散列的代码实现 包括了 解决冲突的方法实现;很有代表性;(本源代码采用的解决冲突…

激活策略 查询_5个提问,详细介绍北极星指标的策略框架

北极星指标(North Star Metric)已经逐渐成为许多公司指导产品发展的重要指标,本文通过五个设问和多个行业案例,系统性地介绍北极星指标这类产品策略框架。如今有非常多的人在谈论和使用北极星指标(North Star Metric&a…

变色龙嗅探卡功能_变色龙功能

变色龙嗅探卡功能在《神秘博士》中,卡梅利恩(Kamelion)角色是一个可以采取任何形式的机器人。 据称,他们使用的物理道具非常麻烦,只有其创建者才能理解,而该创建者并没有帮助纠正它。 因此,Cha…

老人与海好词100英文带翻译_《老人与海》经典语录(英文+译文)

《老人与海》是海明威于1951年在古巴写的一篇中篇小说,于1952年出版。是海明威最著名的作品之一。它围绕一位老年古巴渔夫,与一条巨大的马林鱼在离岸很远的湾流中搏斗而展开故事的讲述。它奠定了海明威在世界文学中的突出地位,这篇小说相继获…

java多态+多态中隐含的问题

【0】RAEDME 0.1)本文总结于 core java volume 1, 感觉多态中存在的这个问题很新颖,故分享之; 【1】继承与is-a法则 1.1)有一个用来判断是否应该设计为继承关系的规则: 这就是 is-a 规则, 它…

MacOS命令终端(CMD)的快捷键/终端快捷键

文章目录常用删除清屏复制粘贴交互/撤销移动光标查找历史命令使用命令查看历史命令标签页控制命令滚屏常用 快捷键说明Control A跳到本行的行首Control E跳到本行的行尾Control U删除光标前面(左侧)的所有文字(还有剪切功能)&…

apache kafka_使用Apache Kafka,Kubernetes和Envoy,Istio,Linkerd的服务网格和云原生微服务...

apache kafka微服务架构不是免费的午餐 ! 微服务需要解耦,灵活,操作透明,数据感知和弹性。 过去几年的大多数材料仅讨论具有紧密耦合且不可扩展的技术(如REST / HTTP)的点对点体系结构。 这篇博客文章介绍了…

c++ 箭头符号怎么打_老司机怎么测量三极管管型、管脚和性能?三极管测量此中有深意...

众所周知,三极管具有基极、集电极、发射极三极,另外还有NPN型还有PNP型,那么如何用最快的方法进行三极管测量来确认三极管的管脚和管型。另外,三极管的工作状态是否可以通过三极管测量进行判断?接下来本网整理了老司机…

java强制类型转换

【0】README 0.1)本文转自 core java volume 1 ,在强制类型转换部分,它提到了 使用 instanceof 以保证 类型成功转换(而不是抛出异常),很有看点; 【1】强制类型转换的相关知识点: …

MacBook快捷键

文章目录一、选择文本二、移动光标三、打开特定的目录四、录屏/截屏五、选择输入法六、视窗七、窗口缩放八、检索/搜索九、目录路径十、页面滚动十一、删除/清空回收站十二、显示隐藏文件十三、程序坞十四、关机十五、清理缓存十六、窗口最小化十七、分屏十八、Finder/访达窗口…

php cdi_通过MicroProfile上下文传播增强了CDI上下文和隔板

php cdi当将CDI与异步执行方法(例如ManagedExecutorService ,传统上不可能访问在原始线程中处于活动状态的所有CDI范围。 MicroProfile Context Propagation可以定义线程执行上下文并将其传递到完成阶段,尽管我们的代码是异步执行的&#xff…

Final Cut Pro X 快捷键

文章目录一、片段编辑二、导出/导入媒体三、选取/选择片段四、修剪(一)修剪模式的三种修剪效果五、其它编辑快捷键六、光标功能状态切换七、移动播放头八、播放九、插入媒体素材到时间线十、更改片段在时间线的外观十一、为片段添加/删除效果十二、为片段…

求三个数的最大最小值

【0】README 0.1) google 搜索出来的答案,真的很让我伤心, 全是大粪啊, 你们进行了多少次的比较, 应该是6次吧,我也是醉完了, 写个非大粪的version (我这里的比较只有两次&#xff…

斐讯k1潘多拉专版固件_斐讯K1刷专版潘多拉固件以及教程(使用感受)

本帖最后由 Super131 于 2016-3-5 10:09 编辑QQ图片20160225010211.png (24.22 KB, 下载次数: 2)2016-2-25 01:02 上传K1的专版潘多固件最有看点一个地方我觉得是外观,比起之前显得让人看着舒服多了QQ图片20160225010400.png (41.37 KB, 下载次数: 0)2016-2-25 01:0…

魔术方法 类 序列化_Java序列化魔术方法及其示例使用

魔术方法 类 序列化在上一篇文章中, 您需要了解有关Java序列化的所有知识 ,我们讨论了如何通过实现Java序列化来启用类的可序列化性。 Serializable接口。 如果我们的类未实现Serializable接口,或者该类具有对非Serializable类的引用&#x…

算法证明_CFR+算法证明过程

在介绍CFR算法之前,我们首先介绍一下基础概念。在CFR算法中,counterfactual utility被定义为以下形式:然后在regret的基础上,CFR算法定义了一个regretlike value,注意在这里CFR算法的regret为一个累加值,而…