热门标签 | 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



推荐阅读
  • 本文提供了 RabbitMQ 3.7 的快速上手指南,详细介绍了环境搭建、生产者和消费者的配置与使用。通过官方教程的指引,读者可以轻松完成初步测试和实践,快速掌握 RabbitMQ 的核心功能和基本操作。 ... [详细]
  • 深入解析Java中HashCode的功能与应用
    本文深入探讨了Java中HashCode的功能与应用。在Java中,HashCode主要用于提高哈希表(如HashMap、HashSet)的性能,通过快速定位对象存储位置,减少碰撞概率。文章详细解析了HashCode的生成机制及其在集合框架中的作用,帮助开发者更好地理解和优化代码。此外,还介绍了如何自定义HashCode方法以满足特定需求,并讨论了常见的实现误区和最佳实践。 ... [详细]
  • 如何在 Java LinkedHashMap 中高效地提取首个或末尾的键值对? ... [详细]
  • 如何在Java中高效构建WebService
    本文介绍了如何利用XFire框架在Java中高效构建WebService。XFire是一个轻量级、高性能的Java SOAP框架,能够简化WebService的开发流程。通过结合MyEclipse集成开发环境,开发者可以更便捷地进行项目配置和代码编写,从而提高开发效率。此外,文章还详细探讨了XFire的关键特性和最佳实践,为读者提供了实用的参考。 ... [详细]
  • Java 9 中 SafeVarargs 注释的使用与示例解析 ... [详细]
  • 深入解析 C 语言与 C++ 之间的差异及关联
    深入解析 C 语言与 C++ 之间的差异及关联 ... [详细]
  • 本课程详细解析了Spring AOP的核心概念及其增强机制,涵盖前置增强、后置增强和环绕增强等类型。通过具体示例,深入探讨了如何在实际开发中有效运用这些增强技术,以提升代码的模块化和可维护性。此外,还介绍了Spring AOP在异常处理和性能监控等场景中的应用,帮助开发者更好地理解和掌握这一强大工具。 ... [详细]
  • 本题库精选了Java核心知识点的练习题,旨在帮助学习者巩固和检验对Java理论基础的掌握。其中,选择题部分涵盖了访问控制权限等关键概念,例如,Java语言中仅允许子类或同一包内的类访问的访问权限为protected。此外,题库还包括其他重要知识点,如异常处理、多线程、集合框架等,全面覆盖Java编程的核心内容。 ... [详细]
  • 本文介绍了一种基于最大匹配算法的简易分词程序的设计与实现。该程序通过引入哈希集合存储词典,利用前向最大匹配方法对输入文本进行高效分词处理,具有较高的准确率和较快的处理速度,适用于中文文本的快速分词需求。 ... [详细]
  • BZOJ1034 详细解析与算法优化
    本文深入解析了BZOJ1034问题,并提出了优化算法。通过借鉴广义田忌赛马的贪心策略,当己方当前最弱的马优于对方最弱的马时进行匹配;同样地,若己方当前最强的马优于对方最强的马,也进行匹配。此方法在保证胜率的同时,有效提升了算法效率。 ... [详细]
  • 本文探讨了在Android应用中实现动态滚动文本显示控件的优化方法。通过详细分析焦点管理机制,特别是通过设置返回值为`true`来确保焦点不会被其他控件抢占,从而提升滚动文本的流畅性和用户体验。具体实现中,对`MarqueeText.java`进行了代码层面的优化,增强了控件的稳定性和兼容性。 ... [详细]
  • 在Java编程中,初学者常会遇到“无法从静态上下文中引用非静态变量this”的编译错误。此问题根源在于对静态(static)与非静态成员特性的理解不足。静态成员属于类本身,而非特定对象实例,因此在静态方法或静态初始化块中直接访问非静态成员会导致编译失败。解决这一问题的关键是将相关代码移至非静态方法中,或通过创建类的实例来间接访问非静态成员。 ... [详细]
  • 本文介绍了一种利用Java编程语言高效实现乘法口诀表打印的方法。通过使用嵌套的`for`循环结构,程序能够系统地生成并输出乘法口诀表,确保代码简洁且易于理解。具体实现中,外部循环控制行数,内部循环负责列数的生成,从而实现了高效的表格展示。此外,该方法还考虑了格式化输出,使得最终的乘法口诀表更加整齐美观。 ... [详细]
  • 如何使用 org.geomajas.configuration.FontStyleInfo.getColor() 方法及其代码示例详解 ... [详细]
  • 在启用分层编译的情况下,即时编译器(JIT)的触发条件涉及多个因素,包括方法调用频率、代码复杂度和运行时性能数据。本文将详细解析这些条件,并探讨分层编译如何优化JVM的执行效率。 ... [详细]
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社区 版权所有