设计模式 工厂方法

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

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

设计模式 工厂方法

设计模式 工厂方法_工厂方法设计模式相关推荐

  1. 设计模式 工厂方法_工厂设计模式–一种有效的方法

    设计模式 工厂方法 如您所知,"工厂方法模式"或俗称"工厂设计模式"是"创意设计模式"类别下的一种设计模式. 模式背后的基本原理是,在运行时 ...

  2. java8 默认方法_默认方法:Java 8的无名英雄

    java8 默认方法 几周前,我写了一个博客,说开发人员学习新语言是因为它们很酷. 我仍然坚持这个主张,因为关于Java 8的事情真的很酷. 尽管毫无疑问,该节目的明星是添加了Lambdas和将函数提 ...

  3. python start方法_进程方法 run和start的区别

    start() 方法来启动进程,真正实现了多进程运行,这时无需等待 run 方法体代码执行完毕而直接继续执行下面的代码:调用 Process 类的 start() 方法来启动一个进程,这时此进程处于就 ...

  4. yii2通过url访问类中的方法_行为型设计模式 访问者模式

    author zong email zongzhe1996@163.com 介绍 在访问者模式中,通过使用一个访问者类,可以改变元素类(被访问者)的执行算法.元素类的执行算法可以随着访问者的改变而改变 ...

  5. 大话设计模式策略模式_多种方法实现商场促销

    V1.0面向过程设计思想 V1.1 添加计费方式下拉框,发现程序不容易维护,不容易扩展,更不容易复用 采用面向对象的设计思想 V2.0面向对象+简单工厂 缺点是每次维护或扩展收费方式都要改动这个工厂, ...

  6. 求解决方法_解决方法

    求解决方法 Relationship management is one of the determining factors in the business health. One of the m ...

  7. java 底层方法_底层方法测试--【Java】

    *********毫秒为单位********************** //开始时间 long beginTime=System.currentTimeMillis(); //结束时间 long e ...

  8. destroy 方法_线程方法destroy()和stop(Throwable)在JDK 11中删除

    destroy 方法 @DrDeprecator (Stuart Marks)在core-libs-dev OpenJDK邮件列表上的消息" RFR(s):8204243:remove Th ...

  9. java设计模式 建造模式_理解java设计模式之建造者模式

    理解java设计模式之建造者模式 发布于 2020-12-10| 复制链接 摘记: 建造者模式(Builder Pattern)主要用于"分步骤构建一个复杂的对象",在这其中&qu ...

最新文章

  1. 关于xilinx fir use reloadable coefficient的用法
  2. 培养你的核心竞争能力
  3. 实现instanceof关键字
  4. 关于解决:ModuleNotFoundError: No module named ‘XXX‘的报错问题
  5. Redux Vuex
  6. java 自定义对象 排序,使用自定义排序顺序对对象的ArrayList进行排序
  7. 直面PHP微服务架构挑战
  8. Facebook将在印度测试联网无人机,可连续飞行90天
  9. json数组传递到后台controller
  10. 大连市打造数字人民币应用示范村
  11. 浅谈css3长度单位rem,以及移动端布局技巧
  12. HTML常用特殊符号集
  13. 谈谈Runtime类中的freeMemory,totalMemory,maxMemory
  14. MybatisPlus自定义sql分页查询
  15. java毕业生设计web人力资源管理系统计算机源码+系统+mysql+调试部署+lw
  16. C++ 智能指针 atuo_ptr,unique_ptr,shared_ptr,weak_ptr
  17. 各种 Python 库/模块/工具
  18. Android 线程 Damo
  19. CSDN图片加载不出来,edge浏览器能够解决
  20. 被虎牙HR抬出公司员工发声

热门文章

  1. I love max and multiply HDU - 6971(详细解答)
  2. 牛客题霸 [ 最长递增子序列] C++题解/答案
  3. [TJOI2011] 卡片(网络流 + 质因子优化建图)
  4. DP专练1( [NOIP 2003]加分二叉树 + 太空梯 )
  5. 模板:莫比乌斯反演(数论)
  6. CF183C:Diverse Permutation(构造)
  7. P3352-[ZJOI2016]线段树【dp】
  8. P5496-[模板]回文自动机【PAM】
  9. 【jzoj】2018.1.30NOIP普及组——模拟赛D组
  10. Memcached总结