设计模式 工厂方法_工厂方法设计模式
设计模式 工厂方法
工厂方法模式是流行的创作设计模式之一。 它并不特别依赖于工厂对象来创建对象。 而是要在同一类中使用单独的方法来创建对象。
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 ; 一个负责创建特定类型车辆的人。
定义子类:
现在,我们有两种类型的VehicleStore : LightVehiclesStore和HeavyVehiclesStore :
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
设计模式 工厂方法
设计模式 工厂方法_工厂方法设计模式相关推荐
- 设计模式 工厂方法_工厂设计模式–一种有效的方法
设计模式 工厂方法 如您所知,"工厂方法模式"或俗称"工厂设计模式"是"创意设计模式"类别下的一种设计模式. 模式背后的基本原理是,在运行时 ...
- java8 默认方法_默认方法:Java 8的无名英雄
java8 默认方法 几周前,我写了一个博客,说开发人员学习新语言是因为它们很酷. 我仍然坚持这个主张,因为关于Java 8的事情真的很酷. 尽管毫无疑问,该节目的明星是添加了Lambdas和将函数提 ...
- python start方法_进程方法 run和start的区别
start() 方法来启动进程,真正实现了多进程运行,这时无需等待 run 方法体代码执行完毕而直接继续执行下面的代码:调用 Process 类的 start() 方法来启动一个进程,这时此进程处于就 ...
- yii2通过url访问类中的方法_行为型设计模式 访问者模式
author zong email zongzhe1996@163.com 介绍 在访问者模式中,通过使用一个访问者类,可以改变元素类(被访问者)的执行算法.元素类的执行算法可以随着访问者的改变而改变 ...
- 大话设计模式策略模式_多种方法实现商场促销
V1.0面向过程设计思想 V1.1 添加计费方式下拉框,发现程序不容易维护,不容易扩展,更不容易复用 采用面向对象的设计思想 V2.0面向对象+简单工厂 缺点是每次维护或扩展收费方式都要改动这个工厂, ...
- 求解决方法_解决方法
求解决方法 Relationship management is one of the determining factors in the business health. One of the m ...
- java 底层方法_底层方法测试--【Java】
*********毫秒为单位********************** //开始时间 long beginTime=System.currentTimeMillis(); //结束时间 long e ...
- destroy 方法_线程方法destroy()和stop(Throwable)在JDK 11中删除
destroy 方法 @DrDeprecator (Stuart Marks)在core-libs-dev OpenJDK邮件列表上的消息" RFR(s):8204243:remove Th ...
- java设计模式 建造模式_理解java设计模式之建造者模式
理解java设计模式之建造者模式 发布于 2020-12-10| 复制链接 摘记: 建造者模式(Builder Pattern)主要用于"分步骤构建一个复杂的对象",在这其中&qu ...
最新文章
- 关于xilinx fir use reloadable coefficient的用法
- 培养你的核心竞争能力
- 实现instanceof关键字
- 关于解决:ModuleNotFoundError: No module named ‘XXX‘的报错问题
- Redux Vuex
- java 自定义对象 排序,使用自定义排序顺序对对象的ArrayList进行排序
- 直面PHP微服务架构挑战
- Facebook将在印度测试联网无人机,可连续飞行90天
- json数组传递到后台controller
- 大连市打造数字人民币应用示范村
- 浅谈css3长度单位rem,以及移动端布局技巧
- HTML常用特殊符号集
- 谈谈Runtime类中的freeMemory,totalMemory,maxMemory
- MybatisPlus自定义sql分页查询
- java毕业生设计web人力资源管理系统计算机源码+系统+mysql+调试部署+lw
- C++ 智能指针 atuo_ptr,unique_ptr,shared_ptr,weak_ptr
- 各种 Python 库/模块/工具
- Android 线程 Damo
- CSDN图片加载不出来,edge浏览器能够解决
- 被虎牙HR抬出公司员工发声
热门文章
- I love max and multiply HDU - 6971(详细解答)
- 牛客题霸 [ 最长递增子序列] C++题解/答案
- [TJOI2011] 卡片(网络流 + 质因子优化建图)
- DP专练1( [NOIP 2003]加分二叉树 + 太空梯 )
- 模板:莫比乌斯反演(数论)
- CF183C:Diverse Permutation(构造)
- P3352-[ZJOI2016]线段树【dp】
- P5496-[模板]回文自动机【PAM】
- 【jzoj】2018.1.30NOIP普及组——模拟赛D组
- Memcached总结