热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

工厂方法模式详解:莫勇鹏老师的深入解析与应用实例

2019年,独角兽企业高薪招聘Python工程师时特别关注工厂方法模式(FactoryMethodPattern)。该模式通过定义一个创建对象的接口,让子类决定实例化哪一个类。莫勇鹏老师深入解析了这一设计模式,并提供了丰富的应用实例,帮助开发者更好地理解和运用工厂方法模式,提升软件设计的灵活性和可扩展性。

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

Factory Method Pattern(工厂方法模式)

在工厂方法模式中,父类负责定义创建对象的公共接口,而子类则负责生成具体的对象,这样做的目的是将类的实例化操作延迟到子类中完成,即由子类来决定究竟应该实例化(创建)哪一个类。

 

工厂方法模式的UML类图

 

Product:产品角色

定义产品的接口。

 

ConcreteProduct:真实的产品

实现接口Product类。

 

Creator:工厂角色

声明工厂方法(FactoryMethod),返回一个产品。

 

ConcreteCreator:真实的工厂

实现FactoryMethod工厂方法,由客户调用,返回一个产品的实例。

 

Java实例——扩展了的手机工厂

 

手机接口:

public interface Mobile {

       public void call();

}

 

手机工厂接口:

public interface MobileFactory {

       public Mobile produceMobile();

}

 

摩托罗拉手机实现手机接口:

public class Motorola implements Mobile{

 

       @Override

       public void call() {

              // TODO Auto-generated method stub

              System.out.println("摩托罗拉手机");

       }

 

}

 

诺基亚手机实现手机接口:

public class Nokia implements Mobile{

 

       @Override

       public void call() {

              // TODO Auto-generated method stub

              System.out.println("诺基亚手机");

       }

 

}

摩托罗拉工厂实现了生产手机的方法,返回摩托罗拉手机:

public class MotorolaFactory implements MobileFactory{

 

       @Override

       public Mobile produceMobile() {

              // TODO Auto-generated method stub

              System.out.print("摩托罗拉工厂制造了");

              return new Motorola();

       }

 

}

 

诺基亚工厂实现了生产手机的方法,返回诺基亚手机:

public class NokiaFactory implements MobileFactory{

 

       @Override

       public Mobile produceMobile() {

              // TODO Auto-generated method stub

              System.out.print("诺基亚工厂制造了");

              return new Nokia();

       }

 

}

 

客户程序:

public class Client {

       public static void main(String args[]){

              MobileFactory mf;

              Mobile m;

              mf=new MotorolaFactory();

              m=mf.produceMobile();

              m.call();

              mf=new NokiaFactory();

              m=mf.produceMobile();

              m.call();

       }

}

 

输出结果:

摩托罗拉工厂制造了摩托罗拉手机

诺基亚工厂制造了诺基亚手机

 

应用情景:

1.      类不知道自己要创建哪一个对象。

2.      类用它的子类来指定创建哪个对象。

3.      客户需要清楚创建了哪一个对象。


转:https://my.oschina.net/mondchan/blog/41371



推荐阅读
  • 本文介绍了如何利用Apache Digester库解决硬编码问题,通过创建自定义配置文件(如Struts配置文件)来动态调整应用程序的行为。文章详细描述了使用Apache Digester将XML文档转换为Java Bean对象的过程,并提供了具体的实现步骤。 ... [详细]
  • 深入解析Java枚举及其高级特性
    本文详细介绍了Java枚举的概念、语法、使用规则和应用场景,并探讨了其在实际编程中的高级应用。所有相关内容已收录于GitHub仓库[JavaLearningmanual](https://github.com/Ziphtracks/JavaLearningmanual),欢迎Star并持续关注。 ... [详细]
  • 深入解析Java虚拟机(JVM)架构与原理
    本文旨在为读者提供对Java虚拟机(JVM)的全面理解,涵盖其主要组成部分、工作原理及其在不同平台上的实现。通过详细探讨JVM的结构和内部机制,帮助开发者更好地掌握Java编程的核心技术。 ... [详细]
  • 本文详细探讨了UML用例图中的两种重要关系——包含关系和扩展关系,通过具体示例解析这两种关系的应用场景及其实现方式。 ... [详细]
  • Java 实现二维极点算法
    本文介绍了一种使用 Java 编程语言实现的二维极点算法。该算法用于从一组二维坐标中筛选出极点,适用于需要处理几何图形和空间数据的应用场景。文章不仅详细解释了算法的工作原理,还提供了完整的代码示例。 ... [详细]
  • 实用正则表达式有哪些
    小编给大家分享一下实用正则表达式有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下 ... [详细]
  • ------------------------------————————————————————————————1.定义一个类,实现与被增强对象相同的接口2.在类中定义一个对象,记住被增强 ... [详细]
  • 本文介绍如何从字符串中移除大写、小写、特殊、数字和非数字字符,并提供了多种编程语言的实现示例。 ... [详细]
  • 深入解析SpringMVC核心组件:DispatcherServlet的工作原理
    本文详细探讨了SpringMVC的核心组件——DispatcherServlet的运作机制,旨在帮助有一定Java和Spring基础的开发人员理解HTTP请求是如何被映射到Controller并执行的。文章将解答以下问题:1. HTTP请求如何映射到Controller;2. Controller是如何被执行的。 ... [详细]
  • 深入解析Spring启动过程
    本文详细介绍了Spring框架的启动流程,帮助开发者理解其内部机制。通过具体示例和代码片段,解释了Bean定义、工厂类、读取器以及条件评估等关键概念,使读者能够更全面地掌握Spring的初始化过程。 ... [详细]
  • 本文档详细介绍了Robot Framework的基础知识、安装配置方法及其实用技巧。从环境搭建到编写第一个测试用例,涵盖了一系列实用的操作指南和最佳实践。 ... [详细]
  • JSOI2010 蔬菜庆典:树结构中的无限大权值问题
    本文探讨了 JSOI2010 的蔬菜庆典问题,主要关注如何处理非根非叶子节点的无限大权值情况。通过分析根节点及其子树的特性,提出了有效的解决方案,并详细解释了算法的实现过程。 ... [详细]
  • 2018-2019学年第六周《Java数据结构与算法》学习总结
    本文总结了2018-2019学年第六周在《Java数据结构与算法》课程中的学习内容,重点介绍了非线性数据结构——树的相关知识及其应用。 ... [详细]
  • 本文深入探讨了SQL数据库中常见的面试问题,包括如何获取自增字段的当前值、防止SQL注入的方法、游标的作用与使用、索引的形式及其优缺点,以及事务和存储过程的概念。通过详细的解答和示例,帮助读者更好地理解和应对这些技术问题。 ... [详细]
  • 本文探讨了在Java中如何正确地将多个不同的数组插入到ArrayList中,避免所有数组在插入后变得相同的问题。我们将分析代码中的问题,并提供解决方案。 ... [详细]
author-avatar
大姑娘不再回_402
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有